Java连接数据库的一般步骤归纳如下:
- 导入驱动,加载驱动类
- 与数据库建立连接
- 发送SQL语句、执行
- 处理结果集
- 关闭连接
下面给出几大数据库的驱动类和连接字符串(url)
数据库 | 驱动类 | 接字符串(ip:port/实例名) |
Oracle | oracle.jdbc.OracleDriver | jdbc:oracle:thin:@localhost:1521:ORCL(ORCL是Oracle的默认实例名) |
MySql | com.mysql.jdbc.Driver | jdbc:mysql://localhost:3306/数据库实例名 |
SqlServer2008 | com.microsoft.sqlserver.jdbc.SqlServerDriver(2008版) | jdbc:microsoft:sqlserver:localhost:1433;databasename=数据库实例名 |
操作数据库详细步骤:
1、加载数据库驱动
try {
Class.forName(驱动类(如com.microsoft.sqlserver.jdbc.SQLServerDriver));
} catch (ClassNotFoundException e) {}
2、获取Connetion对象,与数据库建立连接
try {
Connection connection = DriverManager.getConnection(连接字符串, 数据库用户名, 密码);
} catch (SQLException e) {}
3、编写sql
String sql = "select uname, upwd from users where uname=? and upwd=?"; // ?为占位符
4、创建语句执行者
pstmt = conn.prepareStatement(sql);
// 设置占位符的真实值
pstmt.setString(1, "zhangsan");
pstmt.setString(2, "abc");
5、执行sql,拿到ResultSet
ResultSet resultSet = pstmt.executeQuery(); //这里是查询,对于增删改操作使用pstmt.executeUpdate()方法,返回值为int类型,含义为几行受影响
ResultSet类似于游标,可以上下移动指针,调用其成员方法next()/previous()可以将指针下移/上移,如果有数据则返回1否则返回0
6、从结果集ResultSet中取数据
while (resultSet.next()) {
System.out.println(resultSet.getString("uname") + ": " + resultSet.getString("upwd")); // uname和upwd是字段名
//或者使用resultSet.getString(1), resultSet.getString(2)
}
resultSet的成员方法getXxx("字段名")和getXxx(列下标)是一对重载方法,功能相同,都是取数据,开发中常常指明列明可读性更高,但使用getXxx(int columnIndex)效率更高。
7、关闭连接
按照开启顺序的反序进行关闭,类似栈
try {
resultSet?.close();
pstmt?.close();
connection?.close();
} catch (SqlException e) {}
综上所述,连接数据库可以这样写:
try {
Class.forName(驱动类);
Connection connection = DriverManager.getConnection(连接字符串, 数据库用户名, 密码);
String sql = "select uname, upwd from users where uname=? and upwd=?"; // 使用问号作为占位符
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "zhangsan"); // 设置占位符的真实值
pstmt.setString(2, "abc"); // 设置占位符的真实值
ResultSet resultSet = pstmt.executeQuery();
while (resultSet.next()) { //若果查询结果只有一条数据可将while改为if
System.out.println((resultSet.getString(1)+ ": " + resultSet.getString(2)));
}
} catch (ClassNotFoundException e) {
} catch (SQLException e) {
} catch (Exception e) {
} finally {
try {
if (resultSet != null) resultSet.close();
if (pstmt != null) pstmt.close();
if (connection != null) connection.close();
} catch (SQLException e) {
} catch (Exception e) {
}
}