访问数据库
/** * 在 java.sql 包中有 3 个接口分别定义了对数据库的调用的不同方式: * * Statement * * PrepatedStatement * * CallableStatement */
Statement
/** * 通过调用 Connection 对象的 createStatement 方法创建该对象 * 用于执行静态的 SQL 语句,并且返回执行结果,下列方法执行 SQL 语句: * ResultSet excuteQuery(String sql) * int excuteUpdate(String sql) */
PreparedStatement
/** * 可以通过调用 Connection 对象的 preparedStatement() 方法获取该对象,是 Statement 的子接口,表示一条预编译过的 SQL 语句 * PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 setXXX() 方法来设置这些参数,setXXX() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值 * * PreparedStatement 代码的可读性和可维护性更好,不用拼接 SQL,可以防止 SQL 注入,能最大可能提高性能,DBServer会对预编译语句提供性能优化,因为预编译语句有可能被重复调用 * Statement 中,即使是相同操作但因为数据内容不一样,需要重新执行(语法检查,语义检查,翻译成二进制命令,缓存) */
ResultSet
/** * ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现 * ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行 * ResultSet 接口的常用方法: * boolean next() * getString() */
流程
/** * java.sql.DriverManager 用来装载驱动程序,获取数据库连接 * * java.sql.Connection 完成对某一指定数据库的联接 * * java.sql.Statement 在一个给定的连接中作为SQL执行声明的容器,他包含了两个重要的子类型 * * Java.sql.PreparedSatement 用于执行预编译的sql声明 * * Java.sql.CallableStatement 用于执行数据库中存储过程的调用 * * java.sql.ResultSet 对于给定声明取得结果的途径 */
类型对应
java类型 | SQL类型 |
---|---|
boolean | BIT |
byte | TINYINT |
short | SMALLINT |
int | INTEGER |
long | BIGINT |
String | CHAR,VARCHAR,LONGVARCHAR |
byte array | BINARY , VAR BINARY |
java.sql.Date | DATE |
java.sql.Time | TIME |
java.sql.Timestamp | TIMESTAMP |