数据库已Mysql为例子
第一步:首先要加载数据库驱动
Class.forNmae("com.mysql.jdbc.Driver");
第二步;得到数据库连接,方法是调用DriverManager的静态方法getConnection
String url = "jdbc:mysql://localhost:3306/databaseName?user=root&password=root";
Connection conn = DriverManager.getConnection(String url);
第三部:创建查询语句,有两种方法
String sql ="select name, height from person where id=?";
1, Statement stmt = conn.createStatment();
2,PrepareStatment ps = conn.PrepareStatment(String sql);
这两种方法的区别是第一种有sql注入的bug,并且效率比较低
第二种可以通过使用占位符的方式,比较灵活,解决了sql注入的威胁,通过预编译,执行速度比较快
一次为占位符赋值,从1开始
ps.setInt(1, 20);
可以使用stmt.executeQuery(sql)发送执行语句,返回值是一个ResultSet对象,executeUpdate(sql)的返回值是int类型,代表修改的行数.
ps调用方法和上面的相同, 因为在构造的时候已经有了sql语句,所以只需要调用空参数的方法.
如果是查询,那么需要对结果集处理,一般是封装到一个实体对象中
Person p = new Person();
if(rs.next()) {//判断ResultSet中是否有数据,当有多行数据时应该用while循环
String name= rs.getString("colName");
double height = rs.getDouble("height");
p.setName(name);
p.setHeight(height);
在程序的最后要早finally块中依次关闭资源.
finally {
try {
if(rs != null)
rs.close();
} finally {
try {
if(ps != null)
ps.close();
} finally {
if(conn != null)
conn.close();
}
}
}
涉及到的事务处理需要用到的方法
conn.setAutoCommit(false);//设置自动提交为假
conn.commit();//知道执行这个方法,前面的sql语句才会执行
SavePoint sp = conn.setSavePoint() ;//设置回滚点.
conn.rollback(sp);//回滚到前面设置的那个位置,回滚点前面的语句正常执行
conn.commit();//执行回滚操作