JDBC:java访问数据库的解决方案。几个步骤:1.加载驱动类; 2.与数据库建立连接; 3.执行SQL语句 4.处理结果集 5.关闭连接1. 第一步:加载驱动类: 需要注意:不同的数据库,参照的字符串不同,Oracle的连接为:Class.forName("oracle.jdbc.driver.OracleDriver"); 这一步执行后,程序可能会抛出: ClassNotFoundException,原因一般有:a. 数据库的驱动jar包没有导入到环境变量中b. Class.forName中的字符串拼写不正确2. 第二步:通过DriverManager与数据库建立连接: 其静态方法getConnection用来获取连接。通常需要传入三个参数 参数1:数据库的地址及端口(不同数据库字符串内容不相同) oracle的地址:jdbc:oracle:thin:@host:port:sid 参数2:数据库的用户名 参数3:数据库对应用户名的密码 Connection conn = DriverManager.getConnect ("jdbc:oracle:thin:@host:port:oracle","user", "PSD"); 3.第三步:java.sql.Statement 执行SQL语句并获取结果Statement state = conn.createStatement();String sql="/*这里面是SQL语句*/ ";Statement针对不同的SQL语句提供了不同的执行方法:ResultSet executeQuery(String sql) * 该方法专门用来执行DQL语句,返回的ResultSet表示查询出来的结果集int executeUpdate(String sql) * 该方法专门用来执行DML语句,返回的数字表示执行该语句影响了表中多少条数据boolean execute(String sql) * 该方法理论上什么语句都可以执行了,但是由于DQL,DML都有专门的方法执行了,所以该方法通常用来执行DDL语句ResultSet rs = state.executeQuery(sql);输出查询结果:while(rs.next())
{输出语句} ResultSet提供用于遍历结果集的方法:boolean next() *该方法有两个作用,首先当我们查询出结果集后rs的指针指向第一条数据之上,所以我们需要先调用一次next()使其指针移动到第一条数据上并表示该条数据。第二个作用是看返回值,若指针向下移动后,发现没有数据了,会返回false,若有则返回true,所以我们只有在该方法返回true的情况下才获取当前记录的各个字段对应的值RS还提供了若干个getXXX(String fieldName)方法: *这一系列方法是用来获取RS表示的当前记录中给定字段对应的值。不同的字段由于类型不同需要调用相对应的方法第4步:关闭连接,写在finally块中finally{if(conn!=null){try {conn.close();} catch (SQLException e) {e.PRintStackTrace();}}}
将数据库的连接放在一个工具类里面,达到重用的效果由于访问数据库是经常要用到的操作,所以在工程中,通常编写一个访问数据库的工具类,此后所有访问数据库的操作,都从工具类中获取连接,实现工具类的两种方式:1.直接把数据配置写在工具类DBUtil中2.把数据库配置写在一个properties属性文件里,工具类读入属性文件,逐行获取数据库参数(一般使用第二种) 若使用第一种方法,在后期需要修改所使用的数据库或者说修改host、端口、数据库连接名、密码等等时,就需要修改源代码里面的数据,不便于系统的维护,故一般使用第二种方法 数据库连接工具类DBUtil.java以及连接池的主要步骤: Properties prop = new Properties(); prop.load(new FileInputStream("config.properties"));//根据配置项初始化String driverName = prop.getProperty("driverName");String url = prop.getProperty("url");String username = prop.getProperty("username");String passWord = prop.getProperty("password");//最大连接数 int maxActive = Integer.parseInt(prop.getProperty("maxActive"));//最大等待时间int maxWait = Integer.parseInt(prop.getProperty("maxWait"));//初始化连接池cp = new BasicDataSource();//相当与是Class.forName()中的内容cp.setDriverClassName(driverName);cp.setUrl(url);cp.setUsername(username);cp.setPassword(password);cp.setMaxActive(maxActive);cp.setMaxWait(maxWait);public static Connection getConnection() throws Exception{return cp.getConnection();}
新闻热点
疑难解答