JDBC - 数据库连接

JDBC概念:

java数据库的连接,(Java Database Connectivity 简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口。

连接MySQL中的数据库:jdbc:mysql://localhost:3306/数据库名称?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&useSSL=false";

加载数据库驱动

//1,加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");

如果加载的是SQL server:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

建立连接

数据库URLURL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库。

URL的写法为:"jdbc:mysql://localhost:3306/数据库名称?参数名=参数值..."

常用数据库URL地址的写法:

Oracle:jdbc:oracle:thin:@localhost:2521:数据库名称

SqlServer:jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=数据库名称

MySQL:jdbc:mysql://localhost:3306/数据库名称

Connection

jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中的一个最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的.

创建方法:Connection conn = DriverManager.getConnection( URL,User,PassWord );

常用方法:

createStatement();创建向数据库发送sql的statement对象

prepareStatement(sql);创建向数据库发送预编译sql的PrepareStatement对象

● prepareCall(sql);创建执行存储过程的callableStatement对象

● setAutoCommit(boolean autoCommit);设置事务是否自动提交

 commit();在链接上提交事务

● rollback();在此链接上回滚事务

String url = "jdbc.mysql://localhost:3306/数据库名称";
String username = "用户名";
String password = "用户密码";
Connection conn = null;
//2,获取与数据库的链接
conn = DriverManager.getConnection(url,username,password);

执行SQL语句

Statement:jdbc程序中的Statement对象用于向数据库发送SQL语句。

创建方法:Statement st = conn.createdStatement()

常用方法:

● executeQuery(String sql);用于向数据库发送查询语句

● executeUpdate(String sql);用于向数据库发送insert、update或delete语句

● execute(String sql);用于向数据库发送任意语句

● addBatch(String sql);把多条SQL语句发送到一个批处理中

● executeBatch();向数据库发送一批SQL语句执行。

Statement st = null;
//3,获取用于向数据库发送SQL语句的Statement
st = conn.createdStatement();
//4,向数据库发送SQL
String sql = "select id,name,password,email,birthday from users
st.executeQuery();

PreparedStatement:该类是Statement的子类对象

创建方法:PreparedStatement st = conn.preparedStatement()

preparedStatement st = null;
String sql = "select * from user where name=? and password = ?";
//3,获取用于向数据库发送SQL语句的preparedStatement
st = conn.preparedStatement(sql);//传入SQL语句,进行预编译
st.setString(1,username);
st.setString(2,password);
//4,向数据库发SQL
st.executeQuery();//这里不用传入SQL语句了

Statement与PreparedStatement的区别

相对于Statement对象而言PreparedStatement可以避免SQL注入的问题

如:String sql = "select * from admin where loginname=' "+loginName+" ' and loginpwd=' "+loginPwd+" ' ";

在应用中:

- 》请输入账号:

333

- 》请输入密码:

wer'or'1'='1

实际上发送:select * from admin where loginname=' 333 ' and loginpwd=' wer'or'1'='1 ' ,登录成功!

Statement会使数据库频繁编译SQL,可能会造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。

并且PreparedStatement对于SQL中的参数,允许只用占位符的形式进行替换,简化了SQL语句的编写。

获取结果

jdbc程序中的ResultSet用于代表Sql语句的执行效果。ResultSet封装执行结果时,采用的类似于表格的方式,ResultSet对象维护了一个指向表格数据行的游标、初始的时候,游标在第一行之前调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

获取行ResultSet提供了对结果集进行滚动的方法

● next();移动到下一行

● Previous();移动到前一行

● absolute(int row);移动到指定行

● beforeFirst();移动到ResultSet的最前面

● afterLast();移动到ResultSet的最后面

获取值ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法

● 获取任意类型的数据:

 getObject(int index);

 getObject(String columnName);

● 获取指定类型的数据:

 getString(int index);

 getString(String columnName);

ResultSet rs = null;
//4,向数据库发SQL,并获取代表结果集的ResultSet
String sql = "select id,name,password,email,birthday from users";
rs = st.executeQuery(sql);

//5,取出结果集的数据
rs.afterLast();
rs.previous();
System.out.println("id=" + rs.getObject("id"));
System.out.println("name=" + rs.getObject("name"));
System.out.println("password=" + rs.getObject("password"));
System.out.println("email=" + rs.getObject("email"));
System.out.println("birthday=" + rs.getObject("birthday"));
//或者循环取出所有id
while(rs.next()){
    String id = rs.getString(1);//1代表数据库中表的列数,id在第一列也可以("id")!!!
    System.out.println("id = "+id);
}

猜你喜欢

转载自www.cnblogs.com/Dm920/p/11698639.html