
java连接数据库的代码位于MVC中的M(模型层)中,主要负责与数据库打交道。
本人把我以前写的代码加上注释给你看看希望对你有帮助。
publicclassUserInfoDAO{
//验证登陆名/密码sql语句
//private-----这个sql语句只在本类内部使用,没有必要public
//static-----sql语句仅仅一份就足够了
//final-----sql语句一般在运行时不变,final修饰的变量相当于常量
//常量名所有字母大写
privatestaticfinalStringSQL_CHECK_USERINFO=
"SELECTLOGINNAME,USERNAME,PASSWORD,AGE,ADDRESSFROMUSERINFOWHERELOGINNAME=ANDPASSWORD=";
publicUserInfoDAO(){
}
/
验证登陆名/密码方法
@paramuUserInfo
@returnboolean
/
publicbooleancheckUser(UserInfou){
booleanb=false;//验证是否成功的标识
Connectionconn=null;//数据库连接的引用
pstmt=null;//引用
ResultSetrs=null;//结果集引用
//调用的方法,得到数据库里连接实例
conn=();
try{
//通过Connection的()方法构建实例,参数为sql语句
pstmt=conn(SQL_CHECK_USERINFO);
//为sql语句中的赋值,注意序号从1开始
pstmtsetString(1,u());
pstmtsetString(2,ugetPassword());
//执行查询得到结果集
rs=pstmt();
//在结果集中循环,如果结果集中有记录意味着验证成功
b=rsnext();//标识置为true
while(rsnext()){
b=true;//标识置为true
}
}catch(ex){
Systemoutprintln(exgetMessage());
}finally{
//注意:一定在finally中释放数据库资源
cleanUP(rs,pstmt,conn);
}
returnb;
}
privatevoidcleanUP(ResultSetrs,pstmt,Connectionconn){
try{
if(rs!=null){
rsclose();
}
if(pstmt!=null){
pstmtclose();
}
if(conn!=null){
connclose();
}
}catch(ex){
Systemoutprintln(exgetMessage());
}
}
}
连接数据库查询可以得到一个ResultSet
rs结果集总可以实现吧
然后通过
List
list
=
new
ArrayList();
while(rsnext()){
创建一个实体对象po
posetAttribute1(rsgetString("value1"));
posetAttribute2(rsgetString("value2"));
posetAttribute3(rsgetString("value3"));
listadd(po);
}
requestsetAttribute("list",list);
返回一个list集合到界面通过
<c:foreach
item="${list}"
var="c">
<tr>
<td>${cvalue1}</td>
<td>${cvalue2}</td>
<td>${cvalue3}</td>
</tr>
</c:foreach>
就可以了
我觉得1万的数据并发量并不大,想oracle数据库,mysql承载这些并发是没有问题的
我觉得,主要的问题在于你GPS是一直在修改的,因为车辆在不断的行驶,这样的话,可能会影响数据库的性能
我觉得,你可以用一个内存行的数据库,比如,redis,用这个来存放GPS信息,redis是基于内存的,读写要比关系数据库速度快(忽略网络因素),你可能要问GPS入库怎么弄,可以做一个定时任务,每隔多少时间来将redis的数据写入到数据库中,当然,redis也支持一些算法,比如LRU,来设置何时将数据同步到数据库
for(Int i=0; i++; i<100)
{
sql,增加信息;
执行sql语句
}
跟多for循环应用,参考 如下答案
2016224 i码邦每日一练(JavaSE)
使用for循环输出杨辉三角。
>
List<CatchDate> abc =daoqueryBySQL
//如果你只要ID
List<String> list =new ArrayList<String>();
for(CatchDate cd:abc){
listadd(cdgetCategoryid());
}
return list;
import javasqlConnection;
import javasqlDriverManager;
import javasqlPreparedStatement;
import javasqlResultSet;
import javasqlSQLException;
//stmtexecuteUpdate("create table People(name varchar(255),A int,B int)");
//stmtexecuteUpdate("insert into People values('张三',1,0)");
//stmtexecuteUpdate("insert into People values('李四',2,1)");
//stmtexecuteUpdate("insert into People values('王五',3,1)");
//stmtexecuteUpdate("insert into People values('赵云',4,2)");
//stmtexecuteUpdate("insert into People values('张飞',5,3)");
public class Test {
private static void query(Connection conn,String sql,int a) {
PreparedStatement stmt = null;
ResultSet rs = null;
try {
stmt = connprepareStatement(sql);
stmtsetInt(1, a);
rs = stmtexecuteQuery();
while (rsnext()) {
Systemoutprintln(rsgetString("name")+":"+rsgetInt("A"));
query(conn,sql,rsgetInt("A"));
}
} catch (SQLException e) {
eprintStackTrace();
} finally {
if (rs != null) {
try {
rsclose();
rs=null;
Systemoutprintln(a+":rs closed");
} catch (SQLException e) {
eprintStackTrace();
}
}
if (stmt != null) {
try {
stmtclose();
stmt=null;
Systemoutprintln(a+":stmt closed");
} catch (SQLException e) {
eprintStackTrace();
}
}
}
Systemoutprintln("===============================");
}
public static void main(String[] args) {
Connection conn = null;
try {
conn = DriverManagergetConnection("jdbc:derby:E:/Derby/test");
String sql="select from people where B=";
query(conn,sql, 1);
} catch (SQLException e) {
eprintStackTrace();
} finally {
if (conn != null) {
try {
connclose();
Systemoutprintln("Connection关闭。");
} catch (SQLException e) {
eprintStackTrace();
}
}
}
}
}
我设计了一个思想并实现运行成功:
设计思想:
把数据库表中数据全部查出。每一个数据为一个结点,比如说楼主表的A,B字段中共有数据a、b、c、d、e,则这5个数据为5个结点。创建一个双向图表示节点间的关系。比如说楼主提供的数据的双向图为a<--->b<--->c<--->d<--->e,在我的程序中表现为一个结点类的集合。求结果的时候只要求从指定节点能够到达的节点集合就可以了。
求结果时使用递归调用,原理是:求结点a能到达的节点=求结点a关联节点能到达的节点。
程序运行结果:
数据库数据:
+------+------+
| A | B |
+------+------+
| a | c |
| a | d |
| b | e |
| e | f |
+------+------+
result[a]=[a, c, d]
result[c]=[c, a, d]
result[e]=[e, b, f]
更改数据库数据,添加a和e的关联:
mysql> select from aaa;
+------+------+
| A | B |
+------+------+
| a | c |
| a | d |
| b | e |
| e | f |
| e | a |
+------+------+
5 rows in set (000 sec)
result[a]=[a, c, d, e, b, f, a]
从这个结果看出第一个数据库数据a c d和 b e f是独立的两块,建立了a e的关联后,成了一个整体的块,因此从a节点能到达所有节点。
程序代码:
本程序是使用的Mysql数据库,使用时请导入Mysql数据库驱动。创建TestJdbcjava复制代码进来直接运行。
如有错误或者疑问请联系QQ232319792或者1988-2@163com或者直接发百度信息(别用baiduHi)
import javasqlConnection;
import javasqlDriverManager;
import javasqlResultSet;
import javasqlStatement;
import javautilArrayList;
import javautilList;
public class TestJdbc {
public static List<String> result=new ArrayList<String>();
public static void main(String args[]) throws Exception{
select("a");
Systemoutprintln(result);
}
public static void select(String who) throws Exception{
List<Node> nodes=createMap();//获取节点图
Node thisNode=null;
for(Node n:nodes)//从节点图中获取开始节点
if(ngetName()equals(who))thisNode=n;
digui(thisNode,null);//递归调用,假设开始节点的父亲是空的。
}
public static void digui(Node star,Node father){
resultadd(stargetName());//把本次开始节点加入结果集合
//遍历开始节点的关联节点集合
for(Node n:stargetSons()){
if(father!=null && nequals(father))
//该关联节点是开始节点的父亲节点,那么跳过
//当一个关联节点仅有一个关联节点即他的父亲,那么递归结束
continue;
father=star;//递归前设置父亲节点为本次开始节点
digui(n,father);//递归调用
}
}
public static List<Node> createMap() throws Exception{
List<Node> nodes=new ArrayList<Node>();//创建节点集合保存节电双向集合
//以下链接mysql数据库并把所有数据查询出来
String driverName="commysqljdbcDriver";
ClassforName(driverName);
String url="jdbc:mysql://127001:3306/jdbc";
String username="root";
String pwd="root";
Connection con=null;
con=DriverManagergetConnection(url,username,pwd);
Statement stmt = concreateStatement();
ResultSet rs = stmtexecuteQuery("select from aaa;");
//创建节点引用,保存一条记录中的两个字段值
Node temp1=null;
Node temp2=null;
//遍历每条记录
while(rsnext()){
temp1=new Node(rsgetString(1));//创建节点
temp2=new Node(rsgetString(2));
temp1getSons()add(temp2);//设置节点间关联
temp2getSons()add(temp1);//设置节点间关联
if(nodesindexOf(temp1)==-1)//如果A字段节点在节点图中不存在,则加入到节点图中
nodesadd(temp1);
else{//如果A字段节点在节点图中存在了
//得到已经存在的那个节点,并把B字段节点关联给他。
nodesget(nodesindexOf(temp1))getSons()add(temp2);
temp1=nodesget(nodesindexOf(temp1));
//B字段节点关联的节点是已经存在的了,因此要更改关联对象。更改成已经存在的节点而不是new出来的。
temp2getSons()clear();
temp2getSons()add(nodesget(nodesindexOf(temp1)));
}
if(nodesindexOf(temp2)==-1)
//如果B字段节点在节点图中不存在直接加入节点图
nodesadd(temp2);
else{
//否则,要重新关联。
nodesget(nodesindexOf(temp2))getSons()add(temp1);
}
}
return nodes;
}
}
//构造节点类
class Node{
private String name;//节点值
private List<Node> sons=new ArrayList<Node>();//节点关联节点集合
public Node(String name){
thisname=name;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public List<Node> getSons() {
return sons;
}
public void setSons(List<Node> sons) {
thissons = sons;
}
@Override
public String toString() {
return name+" ";
}
@Override
public boolean equals(Object obj) {
return nameequals(((Node)obj)getName());
}
}
以上就是关于java连接数据库(java连接数据库代码)全部的内容,包括:java连接数据库(java连接数据库代码)、java 查询数据库怎么循环输出、java多用户同时访问和数据库进行交互,如何能够高并发等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)