JDBC初步
public class TestMySqlConnection{
public static void main(String[] args){
Class.forName("com.mysql.jdbc.Driver"); //加载驱动
//数据库:格式:jdbc:mysql(sqlserver): //数据库服务器地址:端口(3306为mysql端口,sqlserver 2005为1433);数据库名称
String url = "jdbc:mysql://localhost:3306/db_localTest?useUnicode=true&characterEncoding=gbk;";
String userName = "root";
String userPwd = "root";
Connection con = DriverManager.getConnection(url,userName,userPwd); //获取connection实例
String strsql = "Insert into tb_User() values('','','')"; //sql
Statement stmt = con.CreateStatement(); //获取Statement实例
stmt.excuteUpdate(strsql); //执行sql语句
con.close();
}
}
Class.forName("驱动路径") //在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),成功加载后,会将Driver类的实例注册到DriverManager类中。
备注:DriverManager 类中方法都是静态方法,直接调用
1、getConnection(String url,String user,String password) 获取connection实例
备注:关于URL标示[书写形式:协议:子协议:数据源标识]
- 协议:在JDBC中总是以jdbc开始
- 子协议:是桥连接的驱动程序或是数据库管理系统名称,如mysql或者sqlserver等
- 数据源标识:标记找到数据库来源的地址与连接端口
2、setLoginTimeout() //获取驱动程序试图登陆到某一数据库可以等待的最长时间,秒为单位
3、println(String message) //将一条消息打印到当前JDBC日志流中
Connection接口:表示与特地数据库连接。要对数据库中对象操作,首先需要获取数据库连接。
Connection 实例就像是在应用程序与数据库之间开通了一条渠道。
Statement接口:用于创建向数据库中传递SQL语句的对象,该接口提供了一些方法可以实现对数据库的常用操作。
Statement分为3中:
【1】静态执行SQL语句 ,通过Statement实现;
【2】执行动态SQL语句,通常通过PreparedStatement实例实现,一般采用这种,预编译方式;可以防止SQL注入。
【3】执行数据库存储过程,通常通过CallableStatement实例实现。
PreparedStatement接口:继承与Statement,用于动态的执行SQL语句,通过PreparedStatement执行的SQL语句,将被预编译保存到PreparedStatement实例中,从而可以反复SQL语句。
执行SQL语句:
Statement接口提供了3种执行SQL语句的方法:executeQuery(), executeUpdate() ,execute()
- 【1】ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句 ,返回一个结果集(ResultSet)对象。
- 【2】int executeUpdate(String sqlString):用于执行INSERT、UPDATE或 DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
- 【3】execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
ResultSet接口:
类似于临时表(TempTable),暂时存储数据库查询操作说获取的结果集。
通过ResultSet获取数据的形式主要是:
while(rs.next())
{
String Name = rs.getString("name");
String Pwd = rs.getString();
}
【列的索引是从左往右编号的,并且从1开始】
加载数据库驱动:Class.forName(String driverName) ;
DriverManager.getConnection() 获取连接对象
返回值:返回与带有给定字符串名的类或者接口相关联的Class对象。
forName() 方法参数指定要加载的数据库驱动,加载成功,会将加载的驱动注册给DriverManager,如果失败,会抛出ClassNotFoundException异常。
关闭JDBC对象
1、操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声明顺序相反:
- 【1】关闭记录集
- 【2】关闭声明
- 【3】关闭连接对象
1 if(rs != null){ // 关闭记录集statement
2 try{
3 rs.close() ;
4 }catch(SQLException e){
5 e.printStackTrace() ;
6 }
7 }
8 if(stmt != null){ // 关闭声明
9 try{
stmt.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
if(conn != null){ // 关闭连接connection对象
try{
conn.close() ;
}catch(SQLException e){
e.printStackTrace() ;
}
}
加载Mysql数据库驱动:
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
}
使用PreparedStatement接口中的excuteUpdate()向Mysql中添加数据
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/db_database";
String userName = "root";
String userPwd = "root";
Connection mycon = DriverManager.getConnection(url,userName,userPwd);
String sql = "Insert into tb_User(username,userPwd,sex,age) values(?,?,?,?)";
PreparedStatement ps = con.PreparedStatement(sql);
ps.setString(1,"李四"); //给占位符?赋值 从1开始
ps.setString(2,"aaa");
ps.setString(3,"男");
ps.setInt(4,23);
ps.excuteUpdate();
con.close()
获得查询结果集:
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/db_database";
String userName = "root";
String userPwd = "root";
Connection con = DriverManager.getConnection(url,userName,userPwd);
Statement stmt = con.CreateStatement();
String sql = "Select * from tb_User";
ResultSet rs = stmt.exuteQuery(sql);
int id,age;
String username,userPwd,sex;
System.out.println("id\t 用户名\t 性别\t 年龄");
while(rs.next()){
id = rs.getInt("id");
username = rs.getString(2);
.
.
.
}
更改数据库中数据:
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/db_database";
String userName = "root";
String userPwd = "root";
String sql = "update tb_users set age = 20 where id = 1";
Connection con = DriverManager.getConnection(url,userName,userPwd);
Statement stmt = con.CreateStatement();
stmt.executeUpdate(sql);
System.out.println("修改成功!");
con.close();
}
使用PreparedStatement 接口中的excuteUpdate方法修改数据库中tb_User
public static void main(String[] args){
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(Exception e){
e.printStackTrace();
}
String url = "jdbc:mysql://localhost:3306/db_database";
String userName = "root";
String userPwd = "root";
String sql = "update tb_User set username=? where sex = ?";
Connection con = DriverManager.getConnection(url,userName,userPwd);
PreparedStatement ps = con.PreparedStatement(sql);
ps.setString(1,"admin");
ps.setString(2,"女");
int count = ps.executeUpdate();
System.out.println("修改成功!");
con.close();
}
模糊查询:
//模糊查询
public class Test02{
public static void main(String[] args){
Class.forName("driverName");
String url = "jdbc:mysql://localhost:3306;DatabaseName=tb_User";
String username = "root";
String userPwd = "root";
Connection con = DriverManager.getConnection(url,username,userPwd);
Statement stmt = con.CreateStatement();
String sql = "Select * from tb_User where username like '%李%'";
ResultSet rs = stmt.excuteQuery(sql);
int id,age;
String userName,userPwd;sex;
System.out.println("编号\t 用户名\t 性别\t 年龄");
while(rs.next())
{
id = rs.getInt("id");
userName = rs.getString(2);
userPwd = rs.getString("password");
sex = rs.getString(4);
age = rs.getInt("age");
System.out.println(id+"\t"+userName+"\t"+sex+"\t"+age);
}
}
}
JDBC调用存储过程(有输入参数IN没有输出参数OUT):
public class TestProcedure01{
public static void main(STrng[] args){
System.out.println("------------调用无参数的存储过程------");
Connection con = null;
CallableStatement callstmt = null;
try
{
Class.forName(ProcessProc.DB_Driver);
con = DriverManager.getConnection(DB_Url,DB_Name,DB_Pwd);
callstmt = con.prepareCall("{call TEST_MICHAEL_NOOUT(?,?,?,?)}");
callstmt.setString(1,"jdbc");
callstmt.setString(2,"JDBC");
callstmt.setDouble(3,8000.00);
callstmt.setString(4,"http://sjsky.iteye.com");
callstmt.exceute();
System.out.println("-----End------");
}
catch(Exception e)
{
e.printStackTrace(System.out);
}finally{
if (callstmt!=null) {
callstmt.close();
}
if (con!=null) {
con.close();
}
}
}
}
static class ProcessProc{
private final static String DB_Driver = "mysql.jdbc.driver";
private final static String DB_Url = "jdbc:mysql://localhost:3306;Db_User";
private final static String DB_Name = "root";
private final static STring DB_Pwd = "root";
}
JDBC批处理http://www.cnblogs.com/QQ931697811/p/5044725.html
JDBC初步的更多相关文章
- JDBC初步 JDBC连接SQLServer 2008之心路历程
转自:http://www.cnblogs.com/weilengdeyu/archive/2013/01/17/2864321.html JDBC简介 今天,研究了下JDBC连接SQL Server ...
- JDBC初步(一)
import java.sql.*; public class TestJDBC { // orcl为oracle数据库中的数据库名,localhost表示连接本机的oracle数据库 // 1521 ...
- jdbc初步(转)
1. Jdbc的六个编程步骤 1. 注册一个驱动 注册驱动程序有三种方式: 方式一:Class.forName(“oracle.jdbc.driver.OracleDriver”); JAVA 规范中 ...
- 初步涉及JDBC
一.为什么要使用JDBC: 1.在之前的学习中,我们都是通过控制台来输入信息,创建对象,然后再输出信息,但是这样无法保存数据,每次程序运行都需要重新输入,很麻烦. 2. 在这样的情况下,我们就需要利用 ...
- JDBC 常用词汇以及初步思想
####JDBC程序访问数据库步骤
- JDBC 编程初步
JDBC 概述 什么是JDBC 是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成,JDBC提供了一种操作数据的标准,JDBC的目标是使Java程序员使用JDBC可以 ...
- JDBC的初步了解及使用
一.概念 1.什么是JDBC? JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由 ...
- Jdbc Template初步了解
JdbcTemplate简介 Java语言提供了jdbc来访问数据库,在jdbc api中需要手动的获取和释放连接等资源,使用起来需要做许多重复的工作.Spring在jdbc api的基础上做了抽象和 ...
- 浅谈JDBC编程
一.概述 1.为什么要用JDBC 数据库是程序不可或缺的一部分,每一个网站和服务器的建设都需要数据库.对于大多数应用程序员(此处不包含数据库开发人员)来说,我们更多的不是在DBMS中对数据库进行操纵, ...
随机推荐
- 使用svn diff的-r参数的来比较任意两个版本的差异
1 svn diff的用法1.1 对比当前本地的工作拷贝文件(working copy)和缓存在.svn下的版本库文件的区别 svn diff 1.2 对比当前本地的工作拷贝文件(working co ...
- python基础10 ---匿名函数和递归
一.匿名函数 1.lambda表达式就相当于匿名函数,其格式为: lambda 参数列表:参数表达式 2.lambda自带return值,因为匿名函数有个限制,就是只能有一个表达式,不用写return ...
- (转)Windows下面安装和配置MySQL(5.6.20)
原文地址:http://www.cnblogs.com/qiyebao/p/3887055.html 1.首先到http://dev.mysql.com/ 上下载windows版mysql5.6免安装 ...
- Get Docker CE for Ubuntu
Docker 分为开源免费的 CE(Community Edition)版本和收费的 EE(Enterprise Edition)版本. 配置 Docker 的 apt 源 1. 安装包,允许 apt ...
- Java+MySql图片数据保存
之前一直没有做过涉及到图片存储的应用,最近要做的东东涉及到了这个点,就做了一个小的例子算是对图片存储的初试吧! 1.创建表: drop table if exists photo; CREATE TA ...
- poj3301 Texas Trip【三分算法】
题目地址:http://poj.org/problem?id=3301 简述:T组测试数据,每组线输入n,代表有n个点,接下来输入这n个点的坐标,坐标都是整数. 要求用一个最小的正方形覆盖所有的点,输 ...
- 算法(Algorithms)第4版 练习 2.2.11(1)
实现关键代码: private static void sort(Comparable[] input, int lo, int hi) { if((lo+CUTOFF-1) >= hi) { ...
- jsp的9个内置对象
Jsp提供了request.response.session.application.out.page.config.exception.pageContext9个内置对象. 1. Request R ...
- cocos2d-x在android真机上设置帧率无效的问题
通过setAnimationInterval设置帧频时,发现在android下没有效果的 在Cocos2dxRenderer .java文件里面找到了onDrawFrame这个函数.里面有句注释 : ...
- Codeforces 577B Modulo Sum:数学 结论【选数之和为m的倍数】
题目链接:http://codeforces.com/problemset/problem/448/C 题意: 给你n个数字,给定m. 问你是否能从中选出若干个数字,使得这些数字之和为m的倍数. 题解 ...