在处理jsp读取mysql中遇到的问题记录

在我第一次使用jdbc,来通过jsp读取mysql中遇到一些问题记录一下。

首先都是一个DBHelper.java的工具类,

package util;

import java.sql.Connection;

import java.sql.DriverManager;

public class DBHelper {

private static final String driver = "com.mysql.jdbc.Driver";//数据库驱动

//连接数据库的URL地址

private static final  String url = "jdbc:mysql://localhost:3306/jiang?useUnicode=true&characterEncoding=UTF-8&useSSL=false";

//数据库的用户名

private static final  String username = "root";

//数据库的密码

private static final  String password = "123456";

private static Connection conn = null;

//静态代码块负责加载驱动

static {

try {

Class.forName(driver);

}catch(Exception ex) {

ex.printStackTrace();

}

}

public static Connection getConnection() throws Exception {

if(conn==null) {

conn = DriverManager.getConnection(url, username, password);

return conn;

}

return conn;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

Connection conn = DBHelper.getConnection();

if(conn!=null) {

System.out.println("数据库连接正常");

}else {

System.out.println("数据库连接失败");

}

}catch(Exception ex){

ex.printStackTrace();

}

}

}

先记录一下 查询:

package dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import Heros.Hero;

import util.DBHelper;

//英雄的业务逻辑类

public class HeroDAO {

public ArrayList<Hero> getAllHeros(){

Connection conn=null;

PreparedStatement stmt = null;

ResultSet rs = null;//数据集

ArrayList<Hero> list = new ArrayList<Hero>();//英雄集合

try {

conn = DBHelper.getConnection();

String sql = "select * from  hero";//Sql语句

//String sql = "select * from  Hero where year=2016";//Sql语句

stmt = conn.prepareStatement(sql);//创建连接对象

rs = stmt.executeQuery();

while(rs.next()) {

Hero hero = new Hero();

hero.setId(rs.getInt("id"));

hero.setYear(rs.getString("year"));

hero.setName(rs.getString("name"));

hero.setPolicital(rs.getString("policital"));

hero.setJob(rs.getString("job"));

hero.setDieYear(rs.getDate("dieYear"));

hero.setPicture(rs.getString("picture"));

hero.setStory(rs.getString("story"));

list.add(hero);

}

return list;

}catch(Exception ex) {

ex.printStackTrace();

return null;

}

finally {

//释放数据集对象

if(rs!=null) {

try {

rs.close();

rs=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//释放语句对象

if(stmt!=null) {

try {

stmt.close();

stmt=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//-----------------------------------------------------------------

//根据英雄编号获取英雄信息

public Hero GetHerosByID(String id) {

Connection conn=null;

PreparedStatement stmt = null;

ResultSet rs = null;//数据集

try {

conn = DBHelper.getConnection();

String sql = "select * from  hero where id=?;";//Sql语句

stmt = conn.prepareStatement(sql);//创建连接对象

stmt.setString(1, id);  //这里指定这个stmt要接收一个string类型的参数

// 也可以指定stmt.setInt(1,id);   指定stmt要接收一个int类型的参数数,意思是编号从1开始

rs = stmt.executeQuery();

if(rs.next()) {

Hero hero = new Hero();

hero.setId(rs.getInt("id"));

hero.setYear(rs.getString("year"));

hero.setName(rs.getString("name"));

hero.setPolicital(rs.getString("policital"));

hero.setJob(rs.getString("job"));

hero.setDieYear(rs.getDate("dieYear"));

hero.setPicture(rs.getString("picture"));

hero.setStory(rs.getString("story"));

//System.out.println(hero.getStory());

return hero;

}else {

return null;

}

}catch(Exception ex) {

ex.printStackTrace();

return null;

}

finally {

//释放数据集对象

if(rs!=null) {

try {

rs.close();

rs=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//释放语句对象

if(stmt!=null) {

try {

stmt.close();

stmt=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//-----------------------------------------------------------------

//-----------------------------------------------------------------

//根据年份获取英雄信息

public ArrayList<Hero> GetHerosByYear(String year) {

Connection conn=null;

PreparedStatement stmt = null;

ResultSet rs = null;//数据集

ArrayList<Hero> list = new ArrayList<Hero>();//英雄集合

try {

conn = DBHelper.getConnection();

String sql = "select * from  hero where year=?;";//Sql语句

//String sql = "select * from  Hero where year=2016";//Sql语句

stmt = conn.prepareStatement(sql);//创建连接对象

stmt.setString(1, year);

rs = stmt.executeQuery();

while(rs.next()) {

Hero hero = new Hero();

hero.setId(rs.getInt("id"));

hero.setYear(rs.getString("year"));

hero.setName(rs.getString("name"));

hero.setPolicital(rs.getString("policital"));

hero.setJob(rs.getString("job"));

hero.setDieYear(rs.getDate("dieYear"));

hero.setPicture(rs.getString("picture"));

hero.setStory(rs.getString("story"));

list.add(hero);

}

return list;

}catch(Exception ex) {

ex.printStackTrace();

return null;

}

finally {

//释放数据集对象

if(rs!=null) {

try {

rs.close();

rs=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//释放语句对象

if(stmt!=null) {

try {

stmt.close();

stmt=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

//-----------------------------------------------------------------

}

下面的是写入(出现了问题):

1,查询的时候,用的方法是:   rs = stmt.executeQuery();  但是写入的时候,需要用到方法是:stmt.execute();

2,在设置sql语句的时候,一直出错

Unknown column 'xxx' in 'field list'  。

但是如果我直接从mysql中复制语句过来,比如:

String sql="insert INTO `jiang`.`danmu`(`content`) VALUES ('中国加油!')";

就没有问题。纠结死我了。直到后来,发现,写入的内容需要用 单引号包起来。于是,我改成了:(content是形参)

String sql="insert INTO danmu(content) values ('"+content+"')";

下面是记录我的脚本:

package dao;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import util.DBHelper;

//保存数据内容进入到数据库中去

public class DanMuDao {

public Boolean SaveDanMu(String content) {

Connection conn=null;

PreparedStatement stmt = null;

ResultSet rs = null;//数据集

try {

conn = DBHelper.getConnection();

//String sql="insert INTO `jiang`.`danmu`(`content`) VALUES ('中国加油!')";

String sql="insert INTO danmu(content) values ('"+content+"')";

stmt = conn.prepareStatement(sql);//创建连接对象

stmt.execute();

}catch(Exception ex) {

ex.printStackTrace();

return false;

}finally {

//释放数据集对象

if(rs!=null) {

try {

rs.close();

rs=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

//释放语句对象

if(stmt!=null) {

try {

stmt.close();

stmt=null;

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return false;

}

}

(0)

相关推荐

  • 【JDBC】CRUD操作

    JDBC的CRUD操作 向数据库中保存记录 修改数据库中的记录 删除数据库中的记录 查询数据库中的记录 保存代码的实现 package demo1;import java.sql.Connection ...

  • (1) Java实现JDBC连接及事务的方式

    许多数据库的auto-commit默认是ON的,比如MySQL,PostgresSQL等.当然也有默认是OFF的,比如Oracle(Oracle里面执行DML语句是需要手动commit的). 这里我们 ...

  • python读取pdf中的文本

    python处理pdf也是常用的技术了,对于python3来说,pdfminer3k是一个非常好的工具. pip install pdfminer3k 首先,为了满足大部分人的需求,我先给一个通用一点 ...

  • mysql中cast() 和convert()的用法讲解

    一.在mysql操作中我们经常需要对数据进行类型转换.此时我们应该使用的是cast()或convert(). 二.两者的对比 相同点:都是进行数据类型转换,实现的功能基本等同 不同点:两者的语法不同, ...

  • 记一次MySQL中Waiting for table metadata lock的解决方法

    最近项目中的数据库查询经常挂起,应用程序启动后也报操作超时.测试人员就说数据库又挂了(貌似他们眼中的连接失败,查询无果都是挂了),通过 show processlist 一看,满屏都是 Waiting ...

  • MYSQL中UNION和UNION ALL的区别有哪些?

    在mysql中如何想要对两个结果集进行合并操作,可以使用UNION和UNION ALL,如果只是想要去除掉重复的记录,属于UNION ALL 即可,但是如何想要除掉没有重复行数据,就要使用Union. ...

  • MySQL中JSON使用

    文章目录 前言 1.创建表和插入数据: 2.查询json中的使用字段: 3.json科普: 4.mysql中操作json的函数: 4.1 JSON_ARRAY:生成json数组. 4.2 JSON_O ...

  • mysql中json字段查询时间范围的方法

    在开发过程中经常会定义一些扩展字段,且需要增加查询,在以往的mysql版本中,json结构是不支持查询的,这样就导致我们不得不新定义字段.在mysql 5.7之后,为了解决这一问题,增加了相关的查询. ...

  • Mysql中timestamp用法详解

    前言:时间戳(timestamp) 前言:时间戳(timestamp) 前言:时间戳(timestamp),一个能表示一份数据在某个特定时间之前已经存在的. 完整的. 可验证的数据,通常是一个字符序列 ...

  • MySQL中的SQL Mode及其作用

    与其它数据库不同,MySQL可以运行在不同的SQL Mode下.SQL Mode定义MySQL应该支持什么样的SQL语法,以及它应该执行什么样的数据验证检查.SQL Mode可以设置为一组应做检查的代 ...

  • 如何直接用Seurat读取GEO中的单细胞测序表达矩阵

    如何直接用Seurat读取GEO中的单细胞测序表达矩阵