java 静态sql_java连接数据库和执行静态和动态的sql语句

►JDBC (Java DatabaseConnectivity) 是用于执行SQL 语句的Java 应用程序接口,由一组用Java 语言编写的类和接口组成。

►JDBC 是一种规范,各数据库厂商为Java 程序员提供标准的数据库访问类和接口,使得独立于DBMS 的Java 应用程序的开发工具和产品成为可能。

►其官方网站为:http://java.sun.com/products/jdbc/index.jsp。

oracle数据库的驱动:oracle.jdbc.oracleDriver

oracle的url:jdbc:oracle:thin:@localhost:1521:安装数据库时的别名  一般都是orcl

mysql数据库的驱动:com.mysql.jdbc.Driver

oracle的url:jdbc:mysql://localhost:3306/数据库名

连接数据库案例

获取Connection对象

第一种

Connection conn=DriverManager.getConnection(url, name, paw);

Class.forName("数据的驱动");

第二种  封装一个工具类来获取Connection对象

创建一个 资源文件====== properties文件  以oracle为例

url=jdbc:oracle:thin:@localhost:1521:orcl

driverClass=oracle.jdbc.OracleDriver

username=scott

password=tiger创建一个工具类  可以获取connection对象

package cn.et;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.util.Properties;

public class OracleDbUtil {

static Properties p=new Properties();

static{

//读取资源文件

InputStream is=OracleDbUtil.class.getResourceAsStream("/oracle.properties");

try {

//将properties文件的键值对加载到内存中

p.load(is);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public static Connection getConnection() throws Exception{

String url=p.getProperty("url");//获取连接服务器的ip地址 端口 和数据库

String driverClass=p.getProperty("driverClass");//告诉jdbc使用的是什么数据库

String uname=p.getProperty("username");//使用哪个账号登录

String pwd=p.getProperty("password");//登录密码

Class.forName(driverClass);//加载该类

Connection conn=DriverManager.getConnection(url,uname,pwd);//获取连接数据库的对象

return conn;

}

}测试类(执行静态的sql语句)

Statement st=conn.createStatement()  获取执行静态sql

package jdbcCURD;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import org.junit.Test;

import java.sql.DatabaseMetaData;

public class MysqlCURD {

public static void main(String[] args) throws Exception {

}

//查询

@Test

public void select() throws Exception{

Connection conn=MysqlDbUtils.getConnection();

Statement st=conn.createStatement();

//Statement用于执行静态的sql语句

ResultSet re=st.executeQuery("select * from dept");

//ResultSet游标遍历数据行 next()

while(re.next()){

String deptno=re.getString("deptno");//通过列明获取数据

String dname=re.getString("dname");

String loc=re.getString(3);//通过索引获取数据

System.out.println(deptno+"--"+dname+"--"+loc);

}

st.close();

conn.close();

}

//增加

@Test

public void insert() throws Exception{

Connection conn=MysqlDbUtils.getConnection();

Statement st=conn.createStatement();

int re=st.executeUpdate("insert into teacher values(5,'老廖')");

System.out.println(re);

st.close();

conn.close();

}

//删除

@Test

public void delete() throws Exception{

Connection conn=MysqlDbUtils.getConnection();

Statement st=conn.createStatement();

int re=st.executeUpdate("delete from teacher where t=5");

System.out.println(re);

st.close();

conn.close();

}

//修改

@Test

public void update() throws Exception{

Connection conn=MysqlDbUtils.getConnection();

Statement st=conn.createStatement();

int re=st.executeUpdate("update teacher set tname='廖廖' where t=5");

System.out.println(re);

st.close();

conn.close();

}

}

测试类1(执行动态的sql语句)

预编译SQL语句:PreparedStatement pscolumn=conn.prepareStatement(sql);

package cn.et;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public class Test_2 {

/*

* 3 写出一个分页的方法

* 定义如下

* tablePager(tableName,curPage,pageSize)

* 调用

* tablePager('Emp',2,10)

* 查询emp表中 第二页的数据(每页显示10条 第二页就是 10-20条)

* 5

*

* 1 1--5 curPage*pageSize-(pageSize-1) curPage*pageSize

* 2 6---10 curPage*pageSize-oageSize*1+1=pageSize*(curPage-1)+1

* 3 11---15

*

*

*/

public static void main(String[] args) throws Exception {

tablePager("EMP",1,100);

}

public static void tablePager(String tableName,int curPage,int pageSize) throws Exception{

int start=pageSize*(curPage-1)+1;

int end=curPage*pageSize;

//连接数据库

Connection conn=OracleDbutil.getConnection();

//获取所有的列明

String count="select wm_concat(column_name) from user_tab_cols where table_name=?";

//System.out.println(count);

//预编译获取所有的列明语句

PreparedStatement pscolumn=conn.prepareStatement(count);

//设值

pscolumn.setString(1,tableName);

//游标抓取数据

ResultSet rs=pscolumn.executeQuery();

rs.next();

//获取一行数据

String column=rs.getString(1);

//按逗号分隔 把所有的列名放在s数组中

String[] s=column.split(",");

//分页查询语句

String sql="select "+column+" from (select t.*,rownum rn from "+tableName+" t) where rn>=? and rn<=?";

//System.out.println(sql);

//预编译分页查询语句

PreparedStatement ps=conn.prepareStatement(sql);

//设值

ps.setInt(1,start);

ps.setInt(2, end);

//游标抓取数据

ResultSet rt=ps.executeQuery();

while(rt.next()){

//遍历数组可以获取下标

for(int i=1;i<=s.length;i++){

System.out.print(rt.getString(i)+" ");

}

System.out.println();

}

}

}测试类2(动态sql语句)

package cn.et;

import java.sql.Statement;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

/*定义一个存储过程 传入表名

删除该表中的重复记录

比如 deleteMul(tableName)

调用 deleteMul('emp'); 必须删除表emp的重复数据 (execute immediate using )*/

public class Test_3 {

public static void main(String[] args) throws Exception {

deleteMul("EMP");

}

public static void deleteMul(String tableName) throws Exception{

//连接数据库

Connection cn=OracleDbutil.getConnection();

//获取列明语句

String count="select wm_concat(column_name) from user_tab_cols where table_name=?";

//预编译获取列明语句

PreparedStatement pscount=cn.prepareStatement(count);

//设值

pscount.setString(1, tableName);

//获取所有的列明

ResultSet rs=pscount.executeQuery();

rs.next();//必须调用该方法

String columns=rs.getString(1);

System.out.println(columns);

//删除重复记录语句

String delete="delete from "+tableName+" where rowid not in (select min(rowid) from "+tableName+" group by "+columns+ ")";

System.out.println(delete);

Statement stat=cn.createStatement();

stat.executeQuery(delete);

//关闭连接

stat.close();

rs.close();

pscount.close();

cn.close();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值