编写访问数据库的Java程序还需要几个重要的类和接口。
static Connection getConnection(String url,String username,String password)
指定数据的URL用户名和密码创建数据库连接对象。url的语法格式是:
jdbc:<数据库的连接机制>:<ODBC数据库名>。
Statement sql = null;
try{
sql = con.createStatement();
}catch(SQLException e){}
ResultSet rs = sql.executeQuery(“SELECT * FROM ksInfo”);
ResultSet对象实际上是一个由查询结果数据的表,是一个管式数据集,由统一形式的数据行组成,一行对应一条查询记录。在ResultSet对象中隐含着一个游标,一次只能获得游标当前所指的数据行,用next方法可取下一个数据行。用数据行的字段(列)名称或位置索引(自1开始)调用形如getXXX()方法获得记录的字段植 。以下是ResultSet对象的部分方法:
用户需要在查询结果集上浏览,或前后移动、或显示结果集的指定记录,这称为可滚动结果集。程序要获得一个可滚动结果集,只要在获得SQL的语句对象时,增加指定结果集的两个参数即可。例如,以下代码:
Statement stmt = con.createStatement(type,concurrency);
ResultSet rs = stmt.executeQuery(SQL语句)
语句对象stmt的SQL查询就能得到相应类型的结果集。
例如,以下代码利用连接对象connect,创建Statement对象stmt,指定结果集可滚动,并以只读方式读数据库:
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
可滚动集上另外一些常用的方法如下:
DriverManager类
DriverManager类处理驱动程序的加载和建立新数据库连接。DriverManager是java.sql包中用于管理数据库驱动程序的类。通常,应用程序只使用类DriverManager的getConnection()静态方法,用来建立与数据库的连接,返回Connection对象:static Connection getConnection(String url,String username,String password)
指定数据的URL用户名和密码创建数据库连接对象。url的语法格式是:
jdbc:<数据库的连接机制>:<ODBC数据库名>。
Connection类
Connection类是java.sql包中用于处理与特定数据库连接的类。Connection对象是用来表示数据库连接的对象,Java程序对数据库的操作都在这种对象上进行。Connection类的主要方法有:- Statement createStatement():创建一个Statement对象。
PreparedStatement prepareStatement(String sql)
:创建一个PreparedStatement
对象来将参数化的 SQL 语句发送到数据库。
- Statement createStatement(int resultSetType,int resultSetConcurrency):创建一个Statement对象,生成具有特定类型的结果集。
- void commit():提交对数据库的改动并释放当前持有的数据库的锁。
- void rollback():回滚当前事务中的所有改动并释放当前连接持有的数据库的锁。
- String getCatalog():获得连接对象的当前目录。
- boolean isClose():判断连接是否已关闭。
- boolean isReadOnly():判断连接是否为只读模式。
- void setReadOnly():设置连接为只读模式。
- void close():释放连接对象的数据库和JDBC资源。
Statement类
Statement类是java.sql包中用于在指定的连接中处理SQL语句的类。数据库编程的要点是在程序中嵌入SQL命令。程序需要声明和创建连接数据库的Connection对象,并让该对象连接数据库。调用类DriverManager的静态方法getConnection()获得Connection对象,实现程序与数据库的连。然后,用Statement类声明SQL语句对象,并调用Connection对象的createStatement()方法,创建SQL语句对象。例如,以下代码创建语句对象sql:Statement sql = null;
try{
sql = con.createStatement();
}catch(SQLException e){}
ResultSet类
有了SQL语句对象后,调用语句对象的方法executeQuery()执行SQL查询,并将查询结果存放在一个用ResultSet类声明的对象中,例如,以下代码读取学生成绩表存于rs 对象中:ResultSet rs = sql.executeQuery(“SELECT * FROM ksInfo”);
ResultSet对象实际上是一个由查询结果数据的表,是一个管式数据集,由统一形式的数据行组成,一行对应一条查询记录。在ResultSet对象中隐含着一个游标,一次只能获得游标当前所指的数据行,用next方法可取下一个数据行。用数据行的字段(列)名称或位置索引(自1开始)调用形如getXXX()方法获得记录的字段植 。以下是ResultSet对象的部分方法:
- byte getByte(int columnIndex):返回指定字段的字节值。
- Date getDate(int columnIndex):返回指定字段的日期值。
- float getFloat(int columnIndex):返回指定字段的浮点值。
- int getInt(int columnIndex):返回指定字段的整数值。
- String getString(int columnIndex):返回指定字段的字符串值。
- double getDouble(String columnName):返回指定字段的双精度值。
- long getLong(String columnName):返回指定字段的long型整值。
- boolean next():返回是否还有下一字段。
用户需要在查询结果集上浏览,或前后移动、或显示结果集的指定记录,这称为可滚动结果集。程序要获得一个可滚动结果集,只要在获得SQL的语句对象时,增加指定结果集的两个参数即可。例如,以下代码:
Statement stmt = con.createStatement(type,concurrency);
ResultSet rs = stmt.executeQuery(SQL语句)
语句对象stmt的SQL查询就能得到相应类型的结果集。
- int 型参数type决定可滚动集的滚动方式:
- ResultSet.TYPE_FORWORD_ONLY,结果集的游标只能向下滚动。
- ResultSet.TYPE_SCROLL_INSENSITIVE,游标可上下移动,当数据库变化时,当前结果集不变。
- ResultSet. TYPE_SCROLL_SENSITIVE,游标可上下移动,当数据库变化时,当前结果集同步改变。
- int 型参数concurrency决定数据库是否与可滚动集同步更新:
- ResultSet.CONCUR_READ_ONLY,不能用结果集更新数据库中的表。
- ResultSet.CONCUR_UPDATETABLE,能用结果集更新数据库中的表。
例如,以下代码利用连接对象connect,创建Statement对象stmt,指定结果集可滚动,并以只读方式读数据库:
stmt = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
可滚动集上另外一些常用的方法如下:
- boolean previous():将游标向上移动,当移到结果集的第一行时,返回false。
- void beforeFirst():将游标移结果集的第一行之前。
- void afterLast():将游标移到结果集的最后一行之后。
- void first():将游标移到第一行。
- void last():将游标移到最后一行。
- boolean isAfterLast():判游标是否在最后一行之后。
- boolean isBeforeFirst():判游标是否在第一行之前。
- boolean isLast():判游标是否在最后一行。
- boolean isFirst():判游标是否在第一行。
- int getRow():获取当前所指的行(行号自1开始编号,结果集空,返回0)。
- boolean absolute(int row):将游标移到row行。
public interface ResultSetMetaData extends Wrapper
可用于获取关于 ResultSet
对象中列的类型和属性信息的对象。以下代码片段创建 ResultSet
对象 rs,创建 ResultSetMetaData
对象 rsmd,并使用 rsmd 查找 rs 有多少列,以及 rs 中的第一列是否可以在 WHERE
子句中使用。
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM TABLE2");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
boolean b = rsmd.isSearchable(1);
字段摘要 | |
---|---|
static int | columnNoNulls 指示列不允许使用 NULL 值的常量。 |
static int | columnNullable 指示列允许使用 NULL 值的常量。 |
static int | columnNullableUnknown 指示不知道列的值是否可为 null 的常量。 |
方法摘要 | |
---|---|
String | getCatalogName(int column) 获取指定列的表目录名称。 |
String | getColumnClassName(int column) 如果调用方法 ResultSet.getObject 从列中获取值,则返回构造其实例的 Java 类的完全限定名称。 |
int | getColumnCount() 返回此 ResultSet 对象中的列数。 |
int | getColumnDisplaySize(int column) 指示指定列的最大标准宽度,以字符为单位。 |
String | getColumnLabel(int column) 获取用于打印输出和显示的指定列的建议标题。 |
String | getColumnName(int column) 获取指定列的名称。 |
int | getColumnType(int column) 获取指定列的 SQL 类型。 |
String | getColumnTypeName(int column) 获取指定列的数据库特定的类型名称。 |
int | getPrecision(int column) 获取指定列的指定列宽。 |
int | getScale(int column) 获取指定列的小数点右边的位数。 |
String | getSchemaName(int column) 获取指定列的表模式。 |
String | getTableName(int column) 获取指定列的名称。 |
boolean | isAutoIncrement(int column) 指示是否自动为指定列进行编号。 |
boolean | isCaseSensitive(int column) 指示列的大小写是否有关系。 |
boolean | isCurrency(int column) 指示指定的列是否是一个哈希代码值。 |
boolean | isDefinitelyWritable(int column) 指示在指定的列上进行写操作是否明确可以获得成功。 |
int | isNullable(int column) 指示指定列中的值是否可以为 null。 |
boolean | isReadOnly(int column) 指示指定的列是否明确不可写入。 |
boolean | isSearchable(int column) 指示是否可以在 where 子句中使用指定的列。 |
boolean | isSigned(int column) 指示指定列中的值是否带正负号。 |
boolean | isWritable(int column) 指示在指定的列上进行写操作是否可以获得成功。 |
public interface PreparedStatement extends Statement
表示预编译的 SQL 语句的对象。
SQL 语句被预编译并存储在 PreparedStatement
对象中。然后可以使用此对象多次高效地执行该语句。
注:用于设置 IN 参数值的设置方法(setShort
、setString
等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER
,那么应该使用 setInt
方法。
如果需要任意参数类型转换,使用 setObject
方法时应该将目标 SQL 类型作为其参数。
在以下设置参数的示例中,con
表示一个活动连接:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00) pstmt.setInt(2, 110592)
字段摘要 |
---|
从接口 java.sql.Statement 继承的字段 |
---|
CLOSE_ALL_RESULTS, CLOSE_CURRENT_RESULT, EXECUTE_FAILED, KEEP_CURRENT_RESULT, NO_GENERATED_KEYS, RETURN_GENERATED_KEYS, SUCCESS_NO_INFO |
方法摘要 | |
---|---|
void | addBatch() 将一组参数添加到此 PreparedStatement 对象的批处理命令中。 |
void | clearParameters() 立即清除当前参数值。 |
boolean | execute() 在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。 |
ResultSet | executeQuery() 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。 |
int | executeUpdate() 在此 PreparedStatement 对象中执行 SQL 语句,该语句必须是一个 SQL 数据操作语言(Data Manipulation Language,DML)语句,比如 INSERT 、UPDATE 或 DELETE 语句;或者是无返回内容的 SQL 语句,比如 DDL 语句。 |
ResultSetMetaData | getMetaData() 获取包含有关 ResultSet 对象列信息的 ResultSetMetaData 对象,ResultSet 对象将在执行此 PreparedStatement 对象时返回。 |
ParameterMetaData | getParameterMetaData() 获取此 PreparedStatement 对象的参数的编号、类型和属性。 |
void | setArray(int parameterIndex, Array x) 将指定参数设置为给定 java.sql.Array 对象。 |
void | setAsciiStream(int parameterIndex, InputStream x) 将指定参数设置为给定输入流。 |
void | setAsciiStream(int parameterIndex, InputStream x, int length) 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void | setAsciiStream(int parameterIndex, InputStream x, long length) 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void | setBigDecimal(int parameterIndex, BigDecimal x) 将指定参数设置为给定 java.math.BigDecimal 值。 |
void | setBinaryStream(int parameterIndex, InputStream x) 将指定参数设置为给定输入流。 |
void | setBinaryStream(int parameterIndex, InputStream x, int length) 将指定参数设置为给定输入流,该输入流将具有给定字节数。 |
void | setBinaryStream(int parameterIndex, InputStream x, long length) 将指定参数设置为给定输入流,该输入流将具有指定字节数。 |
void | setBlob(int parameterIndex, Blob x) 将指定参数设置为给定 java.sql.Blob 对象。 |
void | setBlob(int parameterIndex, InputStream inputStream) 将指定参数设置为 InputStream 对象。 |
void | setBlob(int parameterIndex, InputStream inputStream, long length) 将指定参数设置为 InputStream 对象。 |
void | setBoolean(int parameterIndex, boolean x) 将指定参数设置为给定 Java boolean 值。 |
void | setByte(int parameterIndex, byte x) 将指定参数设置为给定 Java byte 值。 |
void | setBytes(int parameterIndex, byte[] x) 将指定参数设置为给定 Java byte 数组。 |
void | setCharacterStream(int parameterIndex, Reader reader) 将指定参数设置为给定 Reader 对象。 |
void | setCharacterStream(int parameterIndex, Reader reader, int length) 将给定参数设置为给定 Reader 对象,该对象具有给定字符数长度。 |
void | setCharacterStream(int parameterIndex, Reader reader, long length) 将指定参数设置为给定 Reader 对象,该对象具有给定字符数长度。 |
void | setClob(int parameterIndex, Clob x) 将指定参数设置为给定 java.sql.Clob 对象。 |
void | setClob(int parameterIndex, Reader reader) 将指定参数设置为 Reader 对象。 |
void | setClob(int parameterIndex, Reader reader, long length) 将指定参数设置为 Reader 对象。 |
void | setDate(int parameterIndex, Date x) 使用运行应用程序的虚拟机的默认时区将指定参数设置为给定 java.sql.Date 值。 |
void | setDate(int parameterIndex, Date x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Date 值。 |
void | setDouble(int parameterIndex, double x) 将指定参数设置为给定 Java double 值。 |
void | setFloat(int parameterIndex, float x) 将指定参数设置为给定 Java REAL 值。 |
void | setInt(int parameterIndex, int x) 将指定参数设置为给定 Java int 值。 |
void | setLong(int parameterIndex, long x) 将指定参数设置为给定 Java long 值。 |
void | setNCharacterStream(int parameterIndex, Reader value) 将指定参数设置为 Reader 对象。 |
void | setNCharacterStream(int parameterIndex, Reader value, long length) 将指定参数设置为 Reader 对象。 |
void | setNClob(int parameterIndex, NClob value) 将指定参数设置为 java.sql.NClob 对象。 |
void | setNClob(int parameterIndex, Reader reader) 将指定参数设置为 Reader 对象。 |
void | setNClob(int parameterIndex, Reader reader, long length) 将指定参数设置为 Reader 对象。 |
void | setNString(int parameterIndex, String value) 将指定参数设置为给定 String 对象。 |
void | setNull(int parameterIndex, int sqlType) 将指定参数设置为 SQL NULL 。 |
void | setNull(int parameterIndex, int sqlType, String typeName) 将指定参数设置为 SQL NULL 。 |
void | setObject(int parameterIndex, Object x) 使用给定对象设置指定参数的值。 |
void | setObject(int parameterIndex, Object x, int targetSqlType) 使用给定对象设置指定参数的值。 |
void | setObject(int parameterIndex, Object x, int targetSqlType, int scaleOrLength) 使用给定对象设置指定参数的值。 |
void | setRef(int parameterIndex, Ref x) 将指定参数设置为给定 REF(<structured-type>) 值。 |
void | setRowId(int parameterIndex, RowId x) 将指定参数设置为给定 java.sql.RowId 对象。 |
void | setShort(int parameterIndex, short x) 将指定参数设置为给定 Java short 值。 |
void | setSQLXML(int parameterIndex, SQLXML xmlObject) 将指定参数设置为给定 java.sql.SQLXML 对象。 |
void | setString(int parameterIndex, String x) 将指定参数设置为给定 Java String 值。 |
void | setTime(int parameterIndex, Time x) 将指定参数设置为给定 java.sql.Time 值。 |
void | setTime(int parameterIndex, Time x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Time 值。 |
void | setTimestamp(int parameterIndex, Timestamp x) 将指定参数设置为给定 java.sql.Timestamp 值。 |
void | setTimestamp(int parameterIndex, Timestamp x, Calendar cal) 使用给定的 Calendar 对象将指定参数设置为给定 java.sql.Timestamp 值。 |
void | setUnicodeStream(int parameterIndex, InputStream x, int length) 已过时。 |
void | setURL(int parameterIndex, URL x) 将指定参数设置为给定 java.net.URL 值。 |