JDBC分析
一、四步连接数据库:
1、数据创建
private static String url="jdbc:mysql://localhost:3306/DBname"
private String username="root";
private String password="123456";
2、加载驱动:
Class.forName("com.mysql.jdbc.Driver");
3、创建连接对象:
Connection con=DriverManager.getConnection(url, username,password);
4、创建StateMent对象
Statement stmt=con.createStatement();
二、数据库语句的拼接使用
1、 String sql="select * from user where username=' "+username+" ' and
password=' "+password+" ' ";
ResultSet rs=stmt.executeQuery(sql);
三、预编译数据库语句
1、采用PrepareStatement来申明stmt;
PreparedStatement ps=con.prepareStatement
(sql,Statement.RETURN_GENERATED_KEYS);
2、不采用拼接的SQL语句
String sql="insert into user(username,password,nick_name,qq)"+"values
(?,?,?,?)";
3、为?传值
ps.setString(1, "zhangwei");
ps.setString(2, "123");
ps.setString(3, "焰");
ps.setString(4, "12345678");
ps.addBatch();
4、执行SQL语句
ps.executeBatch();或者ps.executeQuery();//不能带有参数
5、获取getGeneratedKeys的值(主键值)
ResultSet key=ps2.getGeneratedKeys();
取得ResultSet结果集中的值
while(key.next()){
String id=key.getInt(1);//
我的主键为表的ID
}
四、事物的使用,一般来说数据库语句有一句就执行一句,但是有的情况下,当一个
SQL语句出现异常的时候,其他的SQL语句就都要撤销操作,这时候我们就
可
以使用事物来处理这种情况,这里面包含对SavePoint的使用。
1、两段正确的数据库语句
String sql="insert into user(username,password,nick_name,qq)"+"values
(?,?,?,?)";
PreparedStatement ps=con.prepareStatement
(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "zhangwei");
ps.setString(2, "123");
ps.setString(3, "焰");
ps.setString(4, "12345678");
ps.addBatch();
ps.executeBatch();
String SQL="insert into user(username,password,nick_name,qq)"+"values
(?,?,?,?)";
PreparedStatement ps1=con.prepareStatement(SQL,
Statement.RETURN_GENERATED_KEYS);
ps1.setString(1, "zhang");
ps1.setString(2, "123");
ps1.setString(3, "xuan");
ps1.setString(4, "12345678");
ps1.addBatch();
ps1.executeBatch();
Savepoint aaa=con.setSavepoint("aaa");//设置保存节点
2、一条错误的SQL语句
String SQL2="insert into users(username,password,nick_name,qq)"+"values
(?,?,?,?)";
PreparedStatement ps2=con.prepareStatement(SQL,
Statement.RETURN_GENERATED_KEYS);
ps2.setString(1, "zhang");
ps2.setString(2, "123");
ps2.setString(3, "xuan");
ps2.setString(4, "12345678");
ps2.addBatch();
try{
ps2.executeQuery();
ResultSet key=ps2.getGeneratedKeys();
if(key.next())
System.out.println("key="+key.getInt(1));
}catch(SQLException f){
System.out.println("bbbb");
con.rollback(aaa);//回滚
}
3、con.commit();//全局提交
4、采用这种方法在创建连接的时候得设置
con.setAutoCommit(false);
不然一旦执行SQL语句就会自动提交