一个简单的java jdbc案例
有些时候,配置一个spring+mybatis框架,然后写xml,dao ,service显得特别繁琐。
如果我们只是想查一下数据库,不考虑连接复用也不考虑动态sql,可以用原生的jdbc来实现,方便快捷,也有利于认识原生jdbc。
我们需要的东西其实不多:
一个数据库连接的配置文件(甚至这个也可以不需要),
db.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@ip:port:sid
user=username
password=pwd
一个class
import java.io.IOException;
import java.sql.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties; /**
* Created by tm on 2016/12/16.
*/
public class Test { /**
* 初始化数据库,加载驱动。
* 调用方法
* @param args
*/
public static void main(String[] args) {
DbConfig.initDriver();
Map<String,Object> data = new HashMap<String, Object>();
Test test = new Test();
System.out.println(test.updateState(data));
} /**
* 更新某个状态
* @param data
* @return
*/
public boolean updateState(Map<String, Object> data) {
Connection conn = null;
boolean flag = false;
try {
String sql = "update table set a=?,b=? ";
conn = DriverManager.getConnection(dbConfig.url, dbConfig.user, dbConfig.password);
PreparedStatement state = conn.prepareStatement(sql);
state.setInt(1,1);
state.setString(2,"2");
int count = state.executeUpdate();
if(count>0){
flag = true;
}
conn.commit();
state.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return flag;
} /**
* 静态内部类,初始化之后就一直存在不会随对象变化。
* 持有数据库信息
*/
static class DbConfig{
static String url;
static String user;
static String password; /**
* init db driver
*/
public static void initDriver() {
Properties props = new Properties();
{
try {
props.load(dbConfig.class.getClassLoader().getResourceAsStream("db.properties"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
}
} String driver = props.getProperty("driver");
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.exit(-1);
} dbConfig.url = props.getProperty("url");
dbConfig.user = props.getProperty("user");
dbConfig.password = props.getProperty("password");
}
}
}
数据库驱动ojdbc6、或者mysql驱动。
当然,以上只是非常简单的用法,不考虑任何的扩展性重用性之类的。
如果有稍微多一点的需求,就最好自己写个dao。如果再多一点的需求就考虑使用框架了。
贴一个简单的连接管理工具,DBUtil
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; /**
* 负责管理数据库连接
* @author TM
*
*/
public class DBUtil {
//连接池
private static BasicDataSource cp; static{
/*
* 初始化静态属性!
* 静态块由于是在类第一次加载时执行
* 并且只会执行一次,所以在这里初始化静态属性是
* 最适合的地方。
*/
//java.util.properties
Properties prop =new Properties();
try {
prop.load(new FileInputStream("config.properties"));
//根据配置项初始化
String driverName=prop.getProperty("driverName");
String url=prop.getProperty("url");
String username=prop.getProperty("username");
String password=prop.getProperty("password");
//最大连接数
int maxActive=Integer.parseInt(prop.getProperty("maxActive"));
//最大等待时间
int maxWait=Integer.parseInt(prop.getProperty("maxWait")); System.out.println(driverName+"\n"+url+"\n"+username+"\n"+password);
System.out.println(maxActive+"\n"+maxWait);
//初始化连接池
cp=new BasicDataSource();
//相当于Class.forName()中的内容
cp.setDriverClassName(driverName);
cp.setUrl(url);
cp.setUsername(username);
cp.setPassword(password);
cp.setMaxActive(maxActive);
cp.setMaxWait(maxWait); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取一个数据库连接
* @return
* @throws Exception
*/
public static Connection getConnection() throws Exception{
/*
* 向连接池要一条可用的空闲连接
* 若连接池尚有可用连接,会直接返回
* 若没有,则该方法进入阻塞状态,等待可用连接
* 等待的时间(就是初始化连接池时设置的maxWait)
* 与初始化连接池时设置的maxWait的时间一致
* 若等待的时间内出现可用的空闲连接
* 则该方法会立刻返回该连接,若等待的时间超过maxWait后
* 仍然没有获得可用连接,该方法会抛出超时异常。
*/
return cp.getConnection();
} /**
* 将给定的数据库连接关闭
* @param conn
*/
public static void closeConnection(Connection conn){
try{
if(conn!=null){
//只是还给了连接池了。
conn.close();
} }catch(Exception e){
e.printStackTrace();
} } public static void main(String[] args) throws Exception{
Connection conn=DBUtil.getConnection();
}
}
一个简单的java jdbc案例的更多相关文章
- 一个简单的Maven小案例
Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...
- 一个简单的Java web服务器实现
前言 一个简单的Java web服务器实现,比较简单,基于java.net.Socket和java.net.ServerSocket实现: 程序执行步骤 创建一个ServerSocket对象: 调用S ...
- Java学习笔记 11/15:一个简单的JAVA例子
首先来看一个简单的 Java 程序. 来看下面这个程序,试试看是否看得出它是在做哪些事情! 范例:TestJava.java // TestJava.java,java 的简单范例 public ...
- Java入门篇(一)——如何编写一个简单的Java程序
最近准备花费很长一段时间写一些关于Java的从入门到进阶再到项目开发的教程,希望对初学Java的朋友们有所帮助,更快的融入Java的学习之中. 主要内容包括JavaSE.JavaEE的基础知识以及如何 ...
- Ant—使用Ant构建一个简单的Java工程(两)
博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...
- IntelliJ IDEA创建一个简单的Java Project(二)
1. 选择要创建的项目类型,同时配置本地的JDK 2. 是否使用模板创建项目 3. 选择项目在本地的存储位置 4. 点击Finish,完成一个简单的Java工程的创建.
- 利用 Docker 构建一个简单的 java 开发编译环境
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...
- 【Java】一个简单的Java应用程序
简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...
- 一个简单的Java应用程序
目录 一个简单的Java应用程序 首次运行结果 程序示例 运行结果 修改大小写之后的运行结果 程序示例 运行结果 关键字public 关键字class 类名及其命名规则 类名必须以字母开头 不能使用J ...
随机推荐
- HDU4722——Good Numbers——2013 ACM/ICPC Asia Regional Online —— Warmup2
今天比赛做得一个数位dp. 首先声明这个题目在数位dp中间绝对是赤裸裸的水题.毫无技巧可言. 题目的意思是个你a和b,要求出在a和b中间有多少个数满足数位上各个数字的和为10的倍数. 显然定义一个二维 ...
- mysql二进制日志的开启和使用
二进制日志(BINLOG)记录了所有的ddl和dml语句,但不包括数据查询语句.语句以“事件”的形式保存,描述数据更改过程. 环境:win8 mysql5.6.23 1.mysql开启二进制日志 ...
- mysql用mysqldump数据库备份和恢复
备份: 用mysqldump命令把数据库被分成sql文件:(注意是在cmd里,不用进入数据库,输入之后会提示输入密码) mysqldump -hlocalhost -uroot -p testdb & ...
- Be the Winner HDU - 2509(反博弈。。这样叫应该没错吧。。)
就是 好几堆苹果 每堆苹果排成一条线 可以任意从每堆拿苹果 如果一堆苹果里拿了之后 则有两种情况 1.从不是边缘拿 拿完这一堆变成两堆 2.从边缘拿 拿完还是一堆 题目还要求 谁 ...
- [洛谷P5081]Tweetuzki 爱取球
题目大意:有$n$个球,每一次取一个球然后放回,问期望多少次取遍所有球 题解:令$f_i$表示已经取了$i$种球,还要取的次数的期望.$f_i=\dfrac in(f_i+1)+\dfrac{n-i} ...
- 51nod 1421 最大MOD值 | 暴力
题面 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj. Input 单组测试数据. 第一行包含一个整数n,表示数 ...
- vi写完文件保存时才发现是readonly😂
在MAC上编辑apache配置文件,老是忘记sudo…… readonly的文件保存时提示 add ! to override, 但这仅是对root来说的啊! 百毒了一下竟然还有解决方案!! :w ! ...
- 【bzoj2938】【Poi2000】病毒
题解: 对病毒串建立ac自动机: 有一个无限长的串等价于可以一直在自动机上匹配,等价于自动机上的转移有环: 当然前提是去掉病毒节点的fail子树: 写一个dfs记录是否在栈中,来过没有找到就不必再来了 ...
- 【组合数学】【P5216】DLS采花
Description DLS 有 \(N\) 个花田,每个花田里有 \(a_i\) 朵花. DLS 喜欢稀奇古怪的花田,他希望重新排列花田,然后去采花. 但 DLS 采花又有一个癖好:他会从左往右采 ...
- python之旅:文件处理
一 文件操作及理论 1. 介绍 计算机系统分为:计算机硬件.操作系统.应用程序三部分我们用python或者其他程序,想要把数据永久的保存下来,就得写到硬盘里,但是应用程序是没有办法直接操作硬件的,这就 ...