JDBC连接数据库学习心得

1.    环境的搭建

首先在intelliJADE下新建工程,并且在工程根目录下创建lib包,lib包用于存放JDBC的jar包,以及以后其他工具jar包.将jar包存入并且导入环境配置后进行下一步

2.数据库连接mysql有两种方式

  (1).通过在页面写数据库连接语句连接数据库.

  优点:当你刚刚搭设好环境用于测试的情况下,这几句话非常方便.连接数据库的基本步骤与语句是JDBC的基础,后面的Util类里面的方法也是基于这个基础封装的.

  缺点:如果你要进行项目开发,每一个需要对数据库进行操作的方法与类都需要写一遍,而且如果数据库的密码路径发生更改,需要每一个写了这些语句的地方都需要更改.费时费力容易出错.

  (2).通过创建一个JdbcUtil类,将数据库连接与关闭的方法包装进去,并且将数据库的地址与账户信息,写到一个文本文件中,并用JdbcUtil类里的方法去读取与调用.

   优点:1.在项目开发中,创建Util这个连接类之后,每次需要对数据库进行操作的时候,可以直接调用这个Util连接类,通过里面封装好的方法可以轻松对数据库进行访问,避免了大量的代码冗余,

        2.如果数据库的路径与账户信息发生改变,只需要对文本文件进行改动即可,极大的方便了操作,也减少了出错的机会

        3.符合java的封装思想

2.1简述JDBC连接数据库的两种方式

(1).在页面写数据库连接语句连接数据库

[1].注册驱动,由于驱动是分厂家的,有重复性的操作,推荐使用类对象

Class.forname("com.mysql.jdbc.Driver");

//上面这句话会将这个类先加载进内存,之后此类的静态代码块就会执行,在静态代码块中就已经有了注册驱动的代码

[2].建立连接并且获取连接对象

Connectionconn = DriverManager.getConnection(path);

path的三种写法

第一种:

path="jdbc:mysql://localhost:3306/jdbc?user=root&password=newpass"

localhost:3306为数据库的地址与端口号,如果是本地数据库那么默认用localhost,本地默认端口号3306.如果是网络上的数据库,比如Linux虚拟机里的则需要填写他们的ip地址例如:172.16.110.129

端口号/jdbc.此jdbc为数据库名称

?连接的是参数 &在参数与参数之间起到连接作用

user与password都是参数名

root与newpass都是参数值

如果数据库的编码不是utf8那么在通过Java代码去访问数据库进行增删改查的时候,需要传输汉字,那么在?后面应该加上编码规则?characterEncoding=UTF-8,这样数据库可以识别Java传过来的汉字

第二种:

path=""jdbc:mysql://localhost:3306/jdbc","root","newpass""

数据库的地址与登录的用户名和信息分别用双引号括起来进行区分,这样可以不用输入?和&也不用输入参数名,只需要输入账号和密码并且用双引号括起来即可.

第三种:

创建一个Properties对象用来存储参数,用户名和密码

Propertiesproperties = new Properties();
 //以key-value的方式存储
 properties.setProperty("user", "root");
 properties.setProperty("password","newpass");

这样在DriverManger.getConnection()里面就需要写

("jdbc:mysql://数据库地址(localhost/网络ip):端口号(本机默认3306)/所选择的数据库名称")

[3].根据连接对象,获得Statement对象

Statementstmt = conn.creatStatement();

[4].由statement对象执行sql语句

例如:

statement.execute("CREATE TABLE stu("id INT PRIMARYKEY , name VARCHAR(50), age INT )");
ResultSet resultSet =stmt.executeQuery("SELECT * FROM stu;");

对于查询语句,需要使用executeQuery进行操作,以及需要调用ResultSet这个类去接收查询结果

//输出当前resultset指针所在位置
 System.out.println(resultSet.getRow());
 //next后的位置
 resultSet.next();
 //previous后的位置
 resultSet.previous();

可以使用while循环遍历搜索结果

while (resultSet.next()) {
     System.out.println("id:" + resultSet.getInt("id") +
             " name:" + resultSet.getString("name") +
             " age:" + resultSet.getInt("age"));
 }

[5].对数据库进行操作之后要进行关闭流操作

conn.close;
stmt.close;
rs.close;

以上五个步骤为直接在类里创建数据库连接,并且进行了插入和查询两个步骤的完整方法

(2).通过创建JdbcUtil类对数据库进行连接

[1].创建一个类,类名是JdbcUtil,并且在src文件夹下创建Properties名字为jdbcfg

[2]打开JdbcUtil开始编写连接,创建静态代码块

//驱动类的路径
 private static StringdriverClass=null;
 //连接数据库使用的url
 private static Stringurl = null;
 //用户名和密码
 private static Stringuser = null;
 private static String password = null;
 private static Connection conn = null;//提前声明是因为之后在catch还需要用到
 static {
     try {
         ClassLoader cl = Jdbcutil.class.getClassLoader();
         InputStream stream =cl.getResourceAsStream("jdbcfg.properties");
         //得到流中的数据
         //创建一个Properties对象
         Propertiesprop = new Properties();
         //通过Properties对象的Load方法,加载流中的数据
         prop.load(stream);
         //根据key,获得value
         driverClass = prop.getProperty("driverClass");
         url = prop.getProperty("url");
         user = prop.getProperty("user");
         password = prop.getProperty("password");
         Class.forName(driverClass);
     } catch (ClassNotFoundException e) {
         e.printStackTrace();
     } catch (IOException e) {
         e.printStackTrace();
     }
 }
 //写一个静态方法,获取连接对象
 public static Connection getConnection() throwsSQLException {
     return DriverManager.getConnection(url,user,password);
 }
 //写一个静态方法,获得stmt对象
 public static Statement getStatment() throwsSQLException {
     conn = getConnection();
     return conn.createStatement();
 }
 public static void release(){
     if (conn!=null){
         try {
             conn.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
 }
 public static void release(Statementstmt){
     release(stmt,null);
 }
 //写一个静态方法,用来释放资源
 //如果想要释放Connection,需要调用Connection对象的close方法
 //所以需要将Connection对象传入release方法,
 //然后在release方法中调用该对象的close方法,
 //释放资源
 //statment对象与ResultSet对象同理
 public staticvoid release( Statement stmt, ResultSet rs){
     release();
     if (stmt!=null){
         try {
             stmt.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
     if (rs!=null){
         try {
             rs.close();
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
 }

2.2通过创建JdbcUtil类之后,以后的操作可以直接调用而不需要重新创建连接