用占位符和数组来操作数据库总是提示下角标越界,找了半天也没弄明白哪里有问题,这个地方是跟着云课堂老师的讲解做的,只不过操作的数据表不一样,但是老师那个就没问题,我就出了问题

,如果有大神能帮忙看看,真的感激不尽!!!!

下面是BaseDao数据库操作通用类

package basedao;

/*

* 数据库操作通用类

*/

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

public class BaseDao {

protected Connection conn;

protected PreparedStatement ps;

protected Statement stmt;

protected ResultSet rs;

//获取数据库连接

public boolean getConnection(){

String driverClass = null;

String jdbcUrl = null;

String user = null;

String password = null;

//读取类路径下的jdbc.properties文件

try {

InputStream is = getClass().getClassLoader().getResourceAsStream("jdbc.properties");

Properties properties = new Properties();

properties.load(is);

driverClass = properties.getProperty("driver");

jdbcUrl = properties.getProperty("jdbcUrl");

user = properties.getProperty("user");

password = properties.getProperty("password");

//加载驱动程序

Class.forName("oracle.jdbc.driver.OracleDriver");

conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:shop","shop_display","1234");

} catch (ClassNotFoundException e) {

e.printStackTrace();

return false;

} catch (IOException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

return true;

}

//增删改

public int executeUpdate(String sql,Object ... params){

int updateRows = 0;

getConnection();

try {

ps=conn.prepareStatement(sql);

//填充占位符

for(int i = 0;i <= params.length;i++){

ps.setObject(i+1, params);

updateRows = ps.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

}

return updateRows;

}

//查询

public ResultSet executeSQL(String sql,Object[] params){

getConnection();

try {

ps=conn.prepareStatement(sql);

//填充占位符

for(int i = 0;i <= params.length;i++){

ps.setObject(i+1, params);     //就是数组这里,控制台抛出的异常里面提示下角标越界,这里我在eclipse上面没有写错:params后面是有字母i的,但是不知道为什么放到论坛上后面的总是消失,编辑好几次了,一直不显示

}

rs = ps.executeQuery();

} catch (SQLException e) {

e.printStackTrace();

}

return rs;

}

//关闭资源

public boolean closeResource (){

if(rs!=null){

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

}

if(ps!=null){

try {

ps.close();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

}

if(stmt!=null){

try {

stmt.close();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

}

if(conn!=null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

return false;

}

}

return true;

}

}

下面是DataBao接口

package data.impl;

public interface DataDao {

//添加数据

public void addData(int id, String name,int location,int leveis);

//删除数据

public void deleteData(int id);

//根据id修改数据

public void updateData(String name,int id);

//查询新闻信息

public void queryData();

}

下面是接口实现类

package data.impl;

import java.sql.ResultSet;

import java.sql.SQLException;

import basedao.BaseDao;

public class DataDaoImpl extends BaseDao implements DataDao{

//增加数据

public void addData(int id, String name,int location,int leveis){

try{

String sql = "insert into custom (id,name,location,leveis) VALUES (?,?,?,?)";

Object[] params={id,name,location,leveis};

int i = this.executeUpdate(sql,params);

if(i>0){

System.out.println("插入数据成功!");

}

}finally{

this.closeResource();

}

}

//删除数据

public void deleteData(int id){

try {

String sql = "delete from custom where id = ?";

Object[] params={id};

int i = this.executeUpdate(sql,params);

if(i>0){

System.out.println("删除数据成功!");

}

}finally{

this.closeResource();

}

}

//修改数据

public void updateData(String name,int id){

try {

String sql = "update custom set name = ? where id = ?";

Object[] params={name,id};

int i = this.executeUpdate(sql,params);

if(i>0){

System.out.println("更改数据成功!");

}

}finally{

this.closeResource();

}

}

//查询新闻信息

public void queryData(){

try {

String sql = "select * from custom";

Object[] params={ };

ResultSet rs=this.executeSQL(sql, params);

//(4)处理执行结果(ResultSet),释放资源

try {

while(rs.next()){

int id = rs.getInt("id");

String name = rs.getString("name");

int location = rs.getInt("location");

int leveis = rs.getInt("leveis");

System.out.println(id + "\t" +name + "\t"+ location + "\t\t" + leveis);

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}finally{

this.closeResource();

}

}

public static void main(String[] args){

DataDaoImpl ddi = new DataDaoImpl();

//  ddi.addData(13,"华为",3,2);

//  ddi.deleteData(13);

//  ddi.updateData("万科",12);

ddi.queryData();

}

}

下面是数据库的表

上面黑体字加粗的部分eclipse里并没有写错

2016-5-3 19:36

2016-5-4 10:55

本帖最后由 遠山如黛 于 2016-5-4 10:55 编辑

分享至:

角标越界 Java_【新人求助】利用占位符操作数据库是总是提示数组角标越界是怎么回事 - Java论坛 - 51CTO技术论坛_中国领先的IT技术社区...相关推荐

  1. 拯救者linux无法正常关机,菜鸟求助。centos无法关机。请各位高手帮忙! - Linux论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    没有主动改过. 我的grub配置文件如下: # grub.conf generated by anaconda # # Note that you do not have to rerun grub ...

  2. oracle 12 c盘已共享,求助,12c使用iscsi作为共享存储的问题,数据不同步 - Oracle论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    发表于 2020-7-16 17:35 | 来自 51CTO网页 2020,7月.8月.9月,全球历史最大崩盘,终于到来了 !! 2020,7月.8月.9月,全球历卝史最大崩卝盘,终于到来了 !! 作 ...

  3. oracle查看表扩展,求助:如何查询oracle表空间允许自动扩展的最大值? - Oracle论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    --表空间使用率检查脚本 --注:该脚本有个缺陷,无法检查使用率为100%的表空间,即dba_free_space中没有记录的表空间 SELECT UPPER(F.TABLESPACE_NAME) T ...

  4. cacti cmd.php 解析,CACTI搭建 - Linux论坛 - 51CTO技术论坛_中国领先的IT技术社区

    ?????系统日志是在哪里?linux的? 手动运行poller不报任何错误. 现在又出个图,我把data source设置为debug后执行了poller.php结果cpu的图除了,其他的图没有,还 ...

  5. 服务器dbback文件夹,怎么让SQL 2000定时复制备份数据库到局域网中的指定电脑上? - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    如题,这是我在网上找的JOB脚本,试用只能在本地盘符间复制有效,局域网中的共享失效. 系统环境: WIN2K3 SQL 2000 SP4 网络环境: SQL服务器:192.168.1.2 备份服务器: ...

  6. mac mtu测试_一个关于MTU的现象,请兄弟们看看是不是确实是这样。 - 网络管理论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    MTU和Fragment详解 1. 基础知识 我们知道, 数据在网络上传输时, 要经过一段一段的链路.当数据从某一段链路的一端传到另一端的过程中, 需要考虑的是数据链路层协议, 在这一层, 我们观察到 ...

  7. 检查mysql dbcc_dbcc checkdb查出来显示这些信息我该怎么处理?谢谢 - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    服务器: 消息 8966,级别 16,状态 2,行 1 未能读取并闩锁页 (1:342144)(用闩锁类型 UP).菴漍 失败. 服务器: 消息 8966,级别 16,状态 1,行 1 未能读取并闩锁 ...

  8. c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:#include using namespace std; #define FLENGTH 1000;        //宏定义保留3位小数 double fun(double ...

  9. vba mysql 没有为命令对象设置命令_怎样解决“没有为命令对象设置命令”的错误? - .Net论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    复制内容到剪贴板 代码:Private Sub dataQuery_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) H ...

最新文章

  1. Codeforces 617E XOR and Favorite Number
  2. 这门国产语言终于要发布 1.0 版本了
  3. 因为加班,错过77万年终大奖,你还加班?
  4. 从数据库中导出数据库文档
  5. 极域电子教室软件卸载密码怎么查看
  6. 三星固态硬盘装linux,三星T5 SSD制作ubuntu18.04随身携带即插即用与win10共享文件真爽~(简单粗暴安装大法一步到位)...
  7. 2014年上半年计算机试题,2014年上半年程序员考试上午试题及答案
  8. Rational License Key Error的永久解决办法
  9. 安卓证书在线制作工具
  10. c语言 运行经过八个翻译阶段,GitHub - BUAA-SE-Compiling/miniplc0-handbook: miniplc0 指导书...
  11. 高数 下总复习 完结
  12. 【畅购商城】用户登录
  13. PHP电商的sku,PHP 商品SKU表怎么设计
  14. atm机存款场景图_怎么在自动存款机上存款?有图具体步骤的更好?
  15. Doom-Emacs安装和基本使用方法
  16. Codesys的文件读取功能---G代码文件读取及运行
  17. I/O多路转换之select与select服务器
  18. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java大学生日常行为评分管理系统9gl38(1)
  19. 《预训练周刊》第30期:谷歌首次展示新版语言模型BERT,参数达4810亿个
  20. Python第二周作业

热门文章

  1. 自从有了mybatis-plus代码生成器,写代码效率高了一大截
  2. 微服务的好处与弊端_《微服务架构设计模式》-学习总结07
  3. Qt中颜色选择框输出所选中的颜色值
  4. linux 查看进程的信号,Linux 进程信号查看与控制
  5. 麦块不显示服务器,为什么开不了服务器啊!
  6. linux龙芯自动挂载u盘,Windows Subsystem for Linux (WSL)挂载移动硬盘U盘
  7. 三星s4 android 6.0吗,快了 三星手机适配Android 6.0时间公布
  8. vs2017 cmake android,CMake构建VS2017工程
  9. php div边框,CSS自定义边框
  10. html5 css3考试f卷,HTML5 CSS3 JavaScriptWeb前端开发自测试卷3.docx