Jdbc连接数据库都需要引入相应的jdbc.jar包。
方法一:jdbc直接连接数据库
<span style="font-family:KaiTi_GB2312;font-size:18px;">try{ //1、加载jdbc驱动程序:在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。 Class.forName("oracle.jdbc.driver.OracleDriver"); //2、提供JDBC连接的URL,连接URL定义了连接数据库时的协议、子协议、数据源标识。 //书写形式:协议:子协议:数据源标识 //协议:在JDBC中总是以jdbc开始 //子协议:是桥连接的驱动程序或是数据库管理系统名称。 //数据源标识:标记找到数据库来源的地址与连接端口。 String url="jdbc:oracle:thin:@localhost:1521:orcl"; //数据库用户名 String username="****"; //密码 String password="****"; //3、创建数据库的连接,要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。 Connection conn=DriverManager.getConnection(url, username, password); }catch(ClassNotFoundException e){ e.printStackTrace(); }catch(SQLException e){ e.printStackTrace(); } </span>
这种连接数据库的方式不够灵活,还记得在做.net项目的时候,都是讲连接数据库操作卸载配置文件中。那么,java也有同样的方法吗?
方法二:使用dom4j,jdbc连接数据库
使用dom4j的目的就是解析xml文件,这样就可以将连接数据库的操作写入xml中,由dom4j读取出来。
Xml文件代码:
<span style="font-family:KaiTi_GB2312;font-size:18px;"><?xml version="1.0" encoding="UTF-8"?> <config> <db-info> <driver-name>oracle.jdbc.driver.OracleDriver</driver-name> <!-- 数据库连接,oracle代表连接的是oracle数据库;thin:@localhost代表的是数据库所在的IP地址(可以保留thin:); 1521代表连接数据库的端口号;ORCL代表的是数据库名称 --> <url>jdbc:oracle:thin:@localhost:1521:orcl</url> <user-name>****</user-name> <password>****</password> </db-info> </config> </span>
读取xml文件,并将读取的结果放入实体中。
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class XmlConfigReader { //懒汉式(延迟加载lazy) private static XmlConfigReader instance = null; //保存jdbc相关配置信息 private JdbcConfig jdbcConfig = new JdbcConfig(); private XmlConfigReader() { //创建saxReader对象 SAXReader reader = new SAXReader(); //通过当前线程的类加载器,获得文件的相对路径,将xml文件读入到输入流 InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("sys-config.xml"); try { // 通过read方法读取xml文件, 转换成Document对象 Document doc = reader.read(in); //取得jdbc相关配置信息 //驱动 Element driverNameElt = (Element)doc.selectObject("/config/db-info/driver-name"); Element urlElt = (Element)doc.selectObject("/config/db-info/url"); Element userNameElt = (Element)doc.selectObject("/config/db-info/user-name"); Element passwordElt = (Element)doc.selectObject("/config/db-info/password"); //设置jdbc相关的配置 jdbcConfig.setDriverName(driverNameElt.getStringValue()); jdbcConfig.setUrl(urlElt.getStringValue()); jdbcConfig.setUserName(userNameElt.getStringValue()); jdbcConfig.setPassword(passwordElt.getStringValue()); System.out.println("读取jdbcConfig-->>" + jdbcConfig); } catch (DocumentException e) { e.printStackTrace(); } } /** * 加锁,实现多线程的同步机制,防止多线程的访问冲突 * @return */ public static synchronized XmlConfigReader getInstance() { if (instance == null) { instance = new XmlConfigReader(); } return instance; } /** * 返回jdbc相关配置 * @return */ public JdbcConfig getJdbcConfig() { return jdbcConfig; } }</span>实体类
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class JdbcConfig { private String driverName; private String url; private String userName; private String password; public String getDriverName() { return driverName; } public void setDriverName(String driverName) { this.driverName = driverName; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { // TODO Auto-generated method stub return this.getClass().getName()+"{driverName:"+driverName+",url:"+url+",userName:"+userName+",password:"+password+"}"; } }</span>
Jdbc连接数据库操作
<span style="font-family:KaiTi_GB2312;font-size:18px;">Connection conn=null; try{ JdbcConfig jdbcConfig=XmlConfigReader.getInstance().getJdbcConfig(); //获取数据库连接驱动 Class.forName(jdbcConfig.getDriverName()); conn=DriverManager.getConnection(jdbcConfig.getUrl(), jdbcConfig.getUserName(), jdbcConfig.getPassword()); }catch(ClassNotFoundException e){ e.printStackTrace(); throw new ApplicationException("系统错误,请联系管理员!"); }catch(SQLException e){ e.printStackTrace(); throw new ApplicationException("系统错误,请联系管理员!"); } return conn;</span>
此步骤和第一种方法连接数据库的步骤一样,只不过,数据库连接信息都是通过dom4j读取的。
读取到连接数据库信息后,我们就开始对数据库进行操作了。
1、 从上面的操作中拿到连接数据库信息。
2、 创建一个Statement
要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3种类型:
a、执行静态SQL语句。通常通过Statement实例实现。
b、执行动态SQL语句。通常通过PreparedStatement实例实现。
c、执行数据库存储过程。通常通过CallableStatement实例实现。
3、执行sql语句
Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
a、executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
b、executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
c、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
4、处理结果和关闭连接,关闭连接和打开相反。
<span style="font-family:KaiTi_GB2312;font-size:18px;">Connection conn=DbUtil.getConnection(); //得到连接数据库信息PreparedStatement pstmt=conn.prepareStatement(sql); //存放sql语句,执行sql语句 pstmt.setString(1,userId); //传递参数,参数从1开始;无参数,则不需要此步骤 ResultSet rs = pstmt.executeQuery(); //将结果返回给ResultSet //处理执行结果 while(rs.next()){ String name=rs.getString("name") String pass=rs.getString(1); //此方法比较高效(列是从左到右编号的,并且从列1开始) } //最后关闭 DbUtil.close(rs); DbUtil.close(pstmt); DbUtil.close(conn); </span>若没有返回值,将ResultSet部分的代码去掉,并根据需要选择Statement实例。