java jdbc提供了一个连接mysql的接口,用于操作mysql数据库,连接mysql数据库需要在项目中导入mysql-connector-java-5.1.32.jar包,下面开始做一个jdbc操作数据库的案例。
1.首先在数据库中创建一个测试表,插入一条测试数据,如下。
CREATE TABLE comments ( id INT NOT NULL AUTO_INCREMENT, myuser VARCHAR(30) NOT NULL, email VARCHAR(30), weburl VARCHAR(100) NOT NULL, date DATE NOT NULL, summary VARCHAR(40) NOT NULL, comments VARCHAR(400) NOT NULL, PRIMARY KEY (ID) ); INSERT INTO comments values (defaultId, 'lars', 'myemail@gmail.com','http://www.vogella.com', '2017-05-06 10:33:11', '摘要','一条评论' );
2.创建一个JdbcDemo类,来操作mysql数据库,代码如下。
package com.baidu; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date; public class JdbcDemo { private Connection connect = null; private Statement statement = null; private PreparedStatement preparedStatement = null; private ResultSet resultSet = null; public void readDataBase() throws Exception { try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); //创建数据库连接 connect = DriverManager.getConnection("jdbc:mysql://localhost/feedback?"+ "user=sqluser&password=sqlupw"); //创建statement对象用于操作数据库 statement = connect.createStatement(); //查询数据返回结果集 resultSet = statement.executeQuery("select * from comments"); //输出查询的数据 writeResultSet(resultSet); //PreparedStatements对象用来做增加或修改数据比statement对象更安全有效,虽然作用一样 //前面创建表时id是自增长的,所以这里就给一个默认的表id如defaultId,起到占位符的作用,并不会真的插入到表中 preparedStatement = connect.prepareStatement("insert into comments values (defaultId, ?, ?, ?, ? , ?, ?)"); //第一个问号就是从1开始设置数据表字段 preparedStatement.setString(1, "zhangsan"); preparedStatement.setString(2, "TestEmail"); preparedStatement.setString(3, "Testweburl"); preparedStatement.setDate(4, (java.sql.Date) new Date()); preparedStatement.setString(5, "TestSummary"); preparedStatement.setString(6, "TestComment"); //执行插入语句 preparedStatement.executeUpdate(); //查询一条数据,只查询部分字段 preparedStatement = connect .prepareStatement("SELECT myuser, email from comments"); //执行查询语句 resultSet = preparedStatement.executeQuery(); writeResultSet(resultSet); //删除一条叫zhangsan的数据 preparedStatement = connect .prepareStatement("delete from comments where myuser= ?"); preparedStatement.setString(1, "zhangsan"); //执行删除语句 preparedStatement.executeUpdate(); resultSet = statement.executeQuery("select * from comments"); //输出结果集所在的表名和类名称 writeMetaData(resultSet); } catch (Exception e) { throw e; } finally { //操作完关闭 close(); } } private void writeMetaData(ResultSet resultSet) throws SQLException { System.out.println("输出此结果所在的表: "); System.out.println("Table: " + resultSet.getMetaData().getTableName(1)); for (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){ //返回表字段名称 System.out.println("Column:"+i+" "+ resultSet.getMetaData().getColumnName(i)); } } private void writeResultSet(ResultSet resultSet) throws SQLException { //遍历结果集并输出 while (resultSet.next()) { String user = resultSet.getString("myuser"); String website = resultSet.getString("weburl"); String summary = resultSet.getString("summary"); Date date = resultSet.getDate("date"); String comment = resultSet.getString("comments"); System.out.println("User: " + user); System.out.println("Website: " + website); System.out.println("summary: " + summary); System.out.println("Date: " + date); System.out.println("Comment: " + comment); } } // 关闭数据库连接 private void close() { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connect != null) { connect.close(); } } catch (Exception e) { } } }
3.创建一个main方法来测试jdbc类。
package com.baidu; public class JdbcTest { public static void main(String[] args) throws Exception { JdbcDemo dao = new JdbcDemo(); dao.readDataBase(); } }