虽然自己自学 java 也有两个年头了,自己也学过很多乱起八糟的技术 ssh 、 springmvc 、 flex 、 nodejs 、 js 等,但是感觉自己像只是做足了面上的功夫,单纯的给我电脑给我网络能够开发一些东西,但是让我说出这些东西的底层原理,我就傻眼了,刚刚在 51CTO 上看了一篇“十年总结,一个 Java 人的十年人生路”看完后思索了一下自己感觉自己不应该继续这么漂浮下去,应该找一个山头停驻一下来好好的学习一下基础。这是我的第一篇,给起个名字吧就叫做“停驻脚步回头看,原来我会的都是浮云系列一 -------java 之 jdbc 操作 mysql ”。
首先说一下 jdbc 操作数据库的步骤:
1、 加载 JDBC 驱动
2、 提供 JDBC url 以供获取 Connection , Connection 对象是 Java 中数据库连接的代表对象,接下来要执行 SQL 的话,必须获得 java.sql.Statement 对象
3、 实例化操作对象( Statement 或者 PreparedStatemet )
3.1 、 Statement statement=connection.createStatement(); 不需要任何参数
3.2 、 PreparedStatement pstmt = conn.prepareStatement(sql) ; 这里需要一个 sql 的参数
有了操作对象 **Statement 就可以调用相应的方法来操作数据库,比如 executeUpdate() 负责执行 CREATE TABLE 、 INSERT 、 DROP TABLE 、 ALTER TABLE 等会改变数据库内容的 SQL ,而 executeQuery ()用来“ SELECT ”等查询数据库的 SQL 。
4、 进行数据库操作
5、 关闭对象 **Statement 关闭链接释放资源
接下来实现一个增删改查操作的例子。我使用的工具是 eclipse+navicate 界面操作数据库。
一、 建立数据库 jdbc_mysql 和表 person
建一个 table 表, navicate 可以直接手动敲一下就好了,我好像又飘起来了,还是写代码吧。
DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, ` name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) |
插入两条数据
INSERT into person VALUES(1, '小明',10); INSERT into person VALUES(2, '小强',20); |
上面的代码都可以在
的 query 执行,执行完后效果为
二、 java 代码实现增删改查
新建一个 java 工程 JDBC_Mysql
之前使用的连接都是JDK本身提供的(JDBC-ODBC),那么现在使用mysql数据库,则数据库的驱动程序只能从网上单独下载。驱动程序下载之后,后缀是 *.jar,那么我们可以直接此jar包设置到classpath路径之中。
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBC_Mysql_Test { /** * @param args */ public static void main(String[] args) { try{ Connection conn= null; //数据库连接对象 Statement stmt= null; //数据库操作对象 ResultSet rs = null; //数据库查询结果集对象 String url=""; //jdbc url String userName= "martin"; String password= "123"; String host= "localhost"; String dbName= "jdbc_mysql"; Class.forName( "com.mysql.jdbc.Driver"); //加载驱动 url = "jdbc:mysql://"+host+"/"+dbName+"?user="+userName+"&password="+password+"&useUnicode=true&characterEncoding=UTF-8"; conn= DriverManager.getConnection(url); //获取连接 stmt=conn.createStatement();//实例化操作对象 //--------------查 System.out.println("---------------查找操作---------------"); String query_sql="SELECT * FROM person "; System.out.println(query_sql); rs= stmt.executeQuery(query_sql);//执行sql,查询所有的person信息 while(rs.next()){ System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } //-------------增 System.out.println("---------------增加操作---------------"); String add_sql="INSERT into person(`name`,`age`) VALUES('你好',24);"; System.out.println(add_sql); stmt.executeUpdate(add_sql); rs=stmt.executeQuery(query_sql); while(rs.next()){ System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } //-------------删 System.out.println("---------------删除操作---------------"); String delete_sql="DELETE FROM person WHERE id=1"; System.out.println(delete_sql); stmt.executeUpdate(delete_sql); rs=stmt.executeQuery(query_sql); while(rs.next()){ System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } //------------改 System.out.println("---------------修改操作---------------"); String update_sql="UPDATE person SET name='你懂的',age=25 WHERE id=2"; System.out.println(update_sql); stmt.executeUpdate(update_sql); rs=stmt.executeQuery(query_sql); while(rs.next()){ System.out.println(rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getString(3) ); } stmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } }