JDBC链接mysql数据库
Unit_1
首先:JDBC:java database connectivity SUN公司提供的一套操作数据库的标准规范。
JDBC与数据库驱动的关系是接口与实现的关系。
JDBC涉及到四个核心的对象
1:DriverManager:注册数据库驱动
2:Connection:表示与数据库创建的连接
3:Statement:操作数据库sql语句的对象 一般使用他的子类PreparedStatement来解决“sql注入的问题”
4:ResultSet:翻译过来是结果集的意思,经常用来装载从数据库中获取的一些信息 如select语句得到的结果
一、DriverManager
注册数据库有两种方式:
①:DriverManager.registerDriver(new com.mysql.jdbc.Driver());这种方法我们通过Ctrl点击源码后发现在底层会注册2次驱动,需要导入相对应的jar包
②:Class.forName("com.mysql.jdbc.Driver"); 通过发射机制直接加载驱动类,较常用的方式
二、Connection
获取数据库连接Connection,如下代码,试图连接到给定的数据库的URL的连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu","root","123456");
jdbc:mysql://localhost:3306/stu
协议:子协议://主机地址:端口号/数据库
通常我们在实际开发中会把数据库的相关配置写在配置文件之中
三、Statement(子类PreparedStatement)
接口的实现在数据库驱动中。用于执行静态 SQL 语句并返回它所生成结果的对象。
ResultSet executeQuery(String sql) 根据查询语句返回结果集。只能执行select语句。
int executeUpdate(String sql) 根据执行的DML(insert update delete)语句,返回受影响的行数。
boolean execute(String sql) 此方法可以执行任意sql语句。返回boolean值,表示是否返回ResultSet结果集。仅当执行select语句,且有返回结果时返回true, 其它语句都返回false;
PreparedStatement是一种预编译的机制,通过查询文档发现它是Statement的子类接口
特点:会把写好的sql语句事先编译并且sql语句中的参数有时发生变化可以过滤掉用户输入的关键字
如:String sql = "select * from student where name=? and password=?";
使用?代替用户的输入或者要查询的表单项
四、ResultSet
a、封装结果集的。
提供一个游标,默认游标指向结果集第一行之前。
调用一次next(),游标向下移动一行。
提供一些get方法。
封装数据的方法
Object getObject(int columnIndex); 根据序号取值,索引从1开始
Object getObject(String ColomnName); 根据列名取值。
将结果集中的数据封装到javaBean中
java的数据类型与数据库中的类型的关系
byte tityint
short smallint
int int
long bigint
float float
double double
String char varchar
Date date
boolean next() 将光标从当前位置向下移动一行
int getInt(int colIndex) 以int形式获取ResultSet结果集当前行指定列号值
int getInt(String colLabel) 以int形式获取ResultSet结果集当前行指定列名值
float getFloat(int colIndex) 以float形式获取ResultSet结果集当前行指定列号值
float getFloat(String colLabel) 以float形式获取ResultSet结果集当前行指定列名值
String getString(int colIndex) 以String 形式获取ResultSet结果集当前行指定列号值
String getString(String colLabel) 以String形式获取ResultSet结果集当前行指定列名值
Date getDate(int columnIndex);
Date getDate(String columnName);
void close() 关闭ResultSet 对象
b、可移动游标的方法
boolean next() 将光标从当前位置向前移一行。
boolean previous() 将光标移动到此 ResultSet 对象的上一行。
boolean absolute(int row) 参数是当前行的索引,从1开始根据行的索引定位移动的指定索引行。
void afterLast()将光标移动到末尾,正好位于最后一行之后。
void beforeFirst() 将光标移动到开头,正好位于第一行之前。
上一个Demo:
package cn.xisole;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import org.junit.Test;
/*
使用JDBC技术实现查询数据库数据,并且显示在控制台处 三种方式如下
注意 导包尽量导入接口
1 注册驱动
2 获取连接Connection
3 得到执行sql语句的对象Statement
4 执行sql语句,并返回结果
5 处理结果
6 关闭资源
*/
public class jdbc_Demo1 {
@Test
public void test1() throws Exception {
/*1加载驱动 利用反射机制加载驱动类 建议使用此种方式
Class.forName("com.mysql.jdbc.Driver"); //无jar驱动也可以*/
//1 注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
//2 获取连接Connection
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu","root","123456");
//3 得到执行sql语句的对象Statement
Statement stmt = conn.createStatement();
/*一般使用PreparedStatement*/
//4 执行sql语句,并返回结果
ResultSet rs = stmt.executeQuery("select * from student");
System.out.println("id"+" name"+" password"+" email"+" brithday");
//5 处理结果
while(rs.next()){
System.out.println(rs.getObject("id")+" "+rs.getObject("NAME")+" "+rs.getObject("password")+" "+rs.getObject("email")+" "+rs.getObject("birthday"));
//System.out.println(rs.getObject(1)+" "+rs.getObject(2)+" "+rs.getObject(3)+" "+rs.getObject(4)+" "+rs.getObject(5));
System.out.println("-------------------------------");
}
//6 关闭资源
rs.close();
stmt.close();
conn.close();
}
@Test
public void test2() throws Exception{
//1加载驱动 利用反射机制加载驱动类 建议使用此种方式
Class.forName("com.mysql.jdbc.Driver"); //无jar驱动也可以
/*//1 注册驱动
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
*/
//2 获取连接Connection
Properties info = new Properties();
info.setProperty("user", "root");
info.setProperty("password", "123456");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu",info);
//3 得到执行sql语句的对象Statement
Statement stmt = conn.createStatement();
//4 执行sql语句,并返回结果
ResultSet rs = stmt.executeQuery("select * from student");
System.out.println("id"+" name"+" password"+" email"+" brithday");
//5 处理结果
while(rs.next()){
System.out.println
(rs.getObject(1)+" "+rs.getObject(2)+" "+rs.getObject(3)+" "+rs.getObject(4)+" "+rs.getObject(5));
System.out.println("-------------------------------");
}
//6 关闭资源
rs.close();
stmt.close();
conn.close();
}
@Test
public void test3() throws Exception{
//1加载驱动 利用反射机制加载驱动类 建议使用此种方式
Class.forName("com.mysql.jdbc.Driver"); //无jar驱动也可以
//2 获取连接Connection
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/stu?user=root&password=123456");
//3 得到执行sql语句的对象Statement
Statement stmt = conn.createStatement();
//4 执行sql语句,并返回结果
ResultSet rs = stmt.executeQuery("select * from student");
System.out.println("id"+" name"+" password"+" email"+" brithday");
//5 处理结果
while(rs.next()){
System.out.println(rs.getObject(1)+" "+rs.getObject(2)+" "+
rs.getObject(3)+" "+rs.getObject(4)+" "+rs.getObject(5));
System.out.println("-------------------------------");
}
//6 关闭资源
rs.close();
stmt.close();
conn.close();
}
}
个人对JDBC的简单总结:
在笔者的理解中,将jdbc当成运输货物的过程规范,数据库里的数据就是我们要运输的,首先要有驾照才能允许运输(Class.forName(com.mysql.jdbc.Driver))
其次是有那么一条路通向哪个数据库以及访问数据库所需要的用户名和密码,DriverManager.getConnection(url,user,password);此方法返回的是Connection对象
之后我们需要一个类似于“货品清单”(Statement),告诉货车到了之后我们是直接对仓库进行一些什么样的操作,需不需要在货车回来的时候带什么数据回来,
如果需要的话使用货车的车厢(ResultSet )来把从仓库中得到的数据带回来。如果不需要的话就释放资源,如JAVA SE中的IO流操作类似,先建立的连接后close()
以上属于最近几天自学的个人总结,如有不足之处请大家多多指教。 -isole
JDBC链接mysql数据库的更多相关文章
- Java基于jdbc链接mysql数据库步骤示列
用JDBC来链接MYSQL数据库,基本步骤都大同小异,只不过不同的数据库之间的URL地址有些不同.其基本步骤可分为以下几点: 1.加载相应的数据库的JDBC驱动程序. 2.利用驱动管理器DriverM ...
- 最简单的一个java驱动jdbc链接mysql数据库
导入jar包:mysql.connector-java-5.0.8-bin.jar String driver = "com.mysql.jdbc.Driver"; String ...
- IDEA使用JDBC链接MySql(java编程)
1.在Maven的pom.xml文件中引入MySql的驱动 <dependency> <groupId>mysql</groupId> <artifactId ...
- 写给小白的JAVA链接MySQL数据库的步骤(JDBC):
作为复习总结的笔记,我罗列了几个jdbc步骤,后边举个简单的例子,其中的try块请读者自行处理. /* * 1.下载驱动包:com.mysql.jdbc.Driver;网上很多下载资源,自己找度娘,此 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- Tomcat通过JNDI方式链接MySql数据库
原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- Java链接MySQL数据库的用配置文件和不用配置文件的代码
1.利用配置文件(db.properties)链接MySQL数据库 package tool; import java.io.FileInputStream;import java.sql.Conne ...
- Java基础93 JDBC连接MySQL数据库
本文知识点(目录): 1.什么是jdbc 2.jdbc接口的核心API 3.使用JDBC技术连接MySQL数据库的方法 4.使用Statement执行sql语句(DDL.DML. ...
随机推荐
- IOS软件国际化(本地化Localizable)
IOS软件国际化(本地化Localizable) iPhone是支持语言最多的手机,它支持各国语言及中国少数名族如蒙古等语言,这也是好多少数名族都用苹果的原因.在这一点上我们自主品牌还是要多学习学习. ...
- Java:reflection
参考:http://docs.oracle.com/javase/tutorial/reflect/index.html what and why? 通过反射来检测或者修改应用某些对象在运行时的状态或 ...
- ASP.NET常用的控件怎么添加
http://jingyan.baidu.com/article/d8072ac4224747ec95cefda2.html
- UIscrollView 代理
// // UIDemoViewController.m // 06-1UIScrollDemo // // Created by k on 14-9-4. // Copyright (c) 2014 ...
- Spark编程进阶
1.累加器 通常在向Spark传递函数时,比如使用map()函数或者用filter()传条件是,可以使用驱动器程序中定义的变量,但是集群中运行的每个人物都会得到这些变量的一份新 ...
- --@angularJS--$scope.watch监听模型变化
$watch简单使用 $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqua ...
- Delphi实例之一个较复杂的记事本的实现
http://www.mamicode.com/info-detail-110813.html delphi中控件位置及自动排版的问题 http://blog.csdn.net/avan_lau/ar ...
- 拖动条(SeekBar)的功能和用法
拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程序,而拖动条则通过滑块的位置来标识数值——而且拖动条允许用户拖动滑块来改变值,因而拖动条通常用于对系统的某种数值进行调节,比如调节音量等 ...
- ThinkPHP URL伪静态、路由规则、重写、生成
一.URL规则 1.默认是区分大小写的 2.如果我们不想区分大小写可以改配置文件 'URL_CASE_INSENSITIVE'=>true,//url不区分大小写 ...
- Promise基础
前言: ES2015将Promise引入语言规范,包括fetch等在内的API也构建在Promise之上.作为让js摆脱“回调地狱”的重要一环和众多框架中的重要基础设施之一,学习如何自己实现一个Pro ...