Java访问数据库Mysql
来源:互联网 发布:贪吃蛇大作战h5源码 编辑:程序博客网 时间:2024/06/05 16:23
一、概述
本文主要介绍Java接连数据库的基本方法和步骤,并对其中的几个要点进行简要说明。
二、数据库访问步骤
在Java中连接数据库进行的访问主要有以下几个步骤:
- 加载数据库驱动
- 注册数据库驱动
- 建立到数据库的连接
- 访问数据库
首先,要调用Class.ForName()加载并注册mysql驱动程序类,加载驱动程序驱动类后,需要注册驱动程序类的一个实例,DriverManager类负责管理驱动程序,这个类提供了registerDriver()方法来注册驱动程序类的实例,并且我们不需要亲自调用这个方法,因为Drive接口的驱动程序类都包含了静态代码块,在这个代码块中会调用registerDriver()方法来注册自身的一个实例。
然后调用DriverManager类的getConnection方法建立到数据库的连接。在建立连接后,需要对数据库进行访问。在java.sql包中定义了三个接口:Statement、PrepareStatement和CallableStatement,分别对应不同的调用方式。其中:
Statement:用于执行静态的sql语句。
PrepareStatement:从Statement接口继承而来,它的对象表示一条预编译过的sql语句,通过调用Connection对象的prepareStatement()方法得到。
CallableStatement:用于执行sql存储过程,该接口从PrepareStatement接口继承而来,通过调用Connection对象的prepareCall()方法得到CallableStatement对象。
完整的访问数据库代码如下:
package com.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class CreateDB{ public static void main(String[] args) { String url="jdbc:mysql://localhost:3306"; String user="root"; String password="281889"; String driverclass="com.mysql.jdbc.Driver";//JDBC类名 try { //加载JDBC驱动,当这个类被加载时,类加载器会执行该类的静态代码块从而注册驱动程序的一个实例 Class.forName(driverclass); //建立数据库的连接 Connection conn=DriverManager.getConnection(url,user,password); //访问数据库 Statement stmt=conn.createStatement(); stmt.execute("use information_schema"); int i=0; ResultSet rs1=stmt.executeQuery("SELECT * FROM information_schema.SCHEMATA where SCHEMA_NAME='student'"); while(rs1.next()) //判断是否含有student数据库 i++; if(i==0) stmt.executeUpdate("create database student"); stmt.executeUpdate("use student"); int j=0; ResultSet rs2=stmt.executeQuery("select * from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='student' and TABLE_NAME='stuinfo' "); while(rs2.next()) //判断数据库中是否含有stuinfo表 j++; if(j==0) stmt.executeUpdate("create table stuinfo(sno INT not null primary key,name VARCHAR(50) not null,age int,sex VARCHAR(50))"); stmt.addBatch("insert into stuinfo values(0420,'阿斌',25,'男')"); stmt.executeBatch(); stmt.close(); stmt=null; conn.close(); conn=null; } catch (ClassNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (SQLException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
三、要点说明
1、execute(String sql)、executeUpdate(String sql)和executeQuery(String sql)的区别:
execute:执行返回多个结果集的sql语句。
Returns:true
if the first result is a ResultSet object
false
if it is an update count or there are no results
executeUpdate:执行类似insert、update或者delete的sql语句。
Returns:(1) the row count for SQL Data Manipulation Language (DML) statements
(2) 0 for SQL statements that return nothing
executeQuery:执行指定的sql语句,返回一个ResultSet对象,用于查看执行的结果。
Returns:a ResultSet object that contains the data produced by the given query;
ps:executeQuery返回的ResultSet永远都不会为null
2、ResultSet对象
ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,其对象维护了一个指向当前数据行的游标,初始状态下游标在第一行之前,可以通过next()方法移动游标到下一行。
3、Statement 与 PreparedStatement的区别(摘录自http://www.jb51.net/article/58343.htm):
1.语法不同
Statement只支持静态编译,SQL语句是写死的。
PreparedStatement支持预编译,用?号来占位。
2.效率不同
Statement每次都要发送一条SQL语句,不支持缓存,执行效率低。
PreparedStatement支持预编译,缓存在数据库,只需发送参数,执行效率快。
3.安全性不同
Statement容易被注入。
注入:狡猾的分子可以编写特殊的SQL语句来入侵数据库。
例如:要查询某个用户的信息
一般情况:SELECT * FROM user_list where username=xxx and password=xxx;(这里的xxx本应为用户填写自己的用户名和密码)
注入情况:SELECT * FROM user_list where username='abc' or 1=1 -- password=xxx;
这样1=1恒等,而且在password前加上了“--”号,后面的内容成为了注释不被执行。也就是说,这样就能不用密码地查询所有的用户信息。
PreparedStatement,因为规定了SQL语句中的参数,所以可以防止注入。
4、判断mysql中是否已存在某数据库:
stmt.execute("use information_schema"); int i=0; ResultSet rs1=stmt.executeQuery("SELECT * FROM information_schema.SCHEMATA where SCHEMA_NAME='student'"); while(rs1.next()) //判断是否含有student数据库 i++; if(i==0) stmt.executeUpdate("create database student");
5、判断数据库中是否已存在某表:
int j=0; ResultSet rs2=stmt.executeQuery("select * from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='student' and TABLE_NAME='stuinfo' "); while(rs2.next()) //判断数据库中是否含有stuinfo表 j++; if(j==0) stmt.executeUpdate("create table stuinfo(sno INT not null primary key,name VARCHAR(50) not null,age int,sex VARCHAR(50))");
- java访问mysql数据库
- java访问MySQL数据库
- java访问MySql数据库
- Java访问数据库Mysql
- Java访问MySQL数据库源代码
- java访问mysql数据库代码
- java远程访问mysql数据库
- java访问MySQL数据库详解
- mysql数据库java访问基础
- 使用java访问MySQL数据库
- JSP+Java Bean访问MySQL数据库
- java线程池访问mysql数据库
- Java访问Mysql数据库的实例
- java使用JDBC访问MYSQL数据库
- Java 访问带有密码的 Mysql数据库
- Java中使用JDBC访问MySQL数据库
- Java访问MySQL数据库的SqlHelper类
- java访问mysql数据库的方法
- 设置一段文字中某些特定的文字可点击,且文字颜色变色
- 常见的查找算法
- linux性能测试:其它工具
- 安卓10分钟制作自己的手机QQ(即时通信)
- struts2防止表单重复提交的解决方案
- Java访问数据库Mysql
- 点击按钮发生颜色快闪
- 【牛腩】CSS盒子模型
- NSObject学习
- 【VTK】VTK Cilpping
- 由Spring管理的Struts2的Action的单实例问题
- C++ 深拷贝和浅拷贝
- android 小白的学习笔记1-Android Studio 导入类库
- 社会文化和媒体的主流宣传方式所导致的后果2