java jdbc笔记整理
以前在公司直接用到的关于数据库方面的都是用ibatis,现在先来学些jdbc编程,顺便比较一下与ibatis框架的区别。
一,使用步骤:
1,加载驱动。
Class.forName(“com.mysql.jdbj.Driver”);
2,使用DriverManager获取数据库连接。url写法:jdbc:subprotocol,other stuff。如mysql: jdbc:mysql://hostname:port/databasename
Connection conn = DriverManager.getConnection(url,user,pass);
3,使用Connection来创建一个Statement对象。
Statement stmt = conn.createStatement();
4.1,使用statement执行SQL语句。Statement有三种执行SQL语句的方法:
1)execute()可执行select任何SQL语句——返回一个boolean值。
2)executeQuery()执行select语句——返回查询到的结果集。
3)executeUpdate()用于执行DML语句,返回一个整数代表被SQL渔具影响的记录条数。
ResultSet rs = stmt.executeQuery(sql);
4.2使用preparedStatement执行SQL语句。
如果需要经常反复执行一条结构相似的渔具,可以使用带占位符(?)参数的SQL语句来代替它。使用PreparedStatement接口。在设置的使用可以用setXxx(int index,Xxx value)的方法来传入参数值。
例子:
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
import java.util.Properties;
public class ConnMysql {
private String driver;
private String url;
private String user;
private String pass;
private void initParam(String paramFile) throws Exception{
Properties props = new Properties();
props.load(new FileInputStream(paramFile));
driver = props.getProperty("driver");
url = props.getProperty("url");
user = props.getProperty("user");
pass = props.getProperty("pass");
}
public static void main(String[] args) throws Exception {
ConnMysql ed = new ConnMysql();
ed.initParam("mysql.ini");
Class.forName(ed.driver);
try(
Connection conn = DriverManager.getConnection(ed.url,ed.user,ed.pass);
Statement stmt = conn.createStatement();
PreparedStatement pstmt = conn.prepareStatement("insert into s1 values(?,?)");
)
{
for(int i = 0; i < 100; i++){
pstmt.setInt(1, i+5);
pstmt.setInt(2,i);
pstmt.executeUpdate();
}
}
}
}
5,可以使用mysql.ini配置文件代替driver,url,user,pass的值。这个文件要把它移进工程。而不是移进src目录下面。
6,使用try(){}
从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。
数据流会在 try 执行完毕后自动被关闭,前提是,这些可关闭的资源必须实现 java.lang.AutoCloseable 接口。
二, 比较statement和preparedStatement的。
1,PreparedStatement预编译SQL语句,性能更好。
2,PreparedStatement无须“拼接”SQL语句,编程更简单。
3,PreparedStatement可以防止SQL语句注入。