java 删除sql注释_Java正则表达式从字符串中删除SQL注释

希望有人可以帮我解决这个问题!

我有一个看起来像这样的sql文件:

CREATE TABLE IF NOT EXISTS users(

id INT UNSIGNED NOT NULL AUTO_INCREMENT,

firstname VARCHAR(30) NOT NULL,

lastname VARCHAR(30) NOT NULL,

PRIMARY KEY (id),

CONSTRAINT UNIQUE (firstname,lastname)

)

ENGINE=InnoDB

;

INSERT IGNORE INTO users (firstname,lastname) VALUES ('x','y');

/*

INSERT IGNORE INTO users (firstname,lastname) VALUES ('a','b');

*/

我有一个web应用程序,它在启动时用这个函数初始化一个mysql数据库:

public static void initDatabase(ConnectionPool pool, File sqlFile){

Connection con = null;

Statement st = null;

String mySb=null;

try{

con = pool.getConnection();

mySb=IOUtils.copyToString(sqlFile);

// We use ";" as a delimiter for each request then we are sure to have well formed statements

String[] inst = mySb.split(";");

st = con.createStatement();

for(int i = 0; i

// we ensure that there is no spaces before or after the request string

// in order not to execute empty statements

if(!inst[i].trim().isEmpty()){

st.executeUpdate(inst[i]);

}

}

st.close();

}catch(IOException e){

throw new RuntimeException(e);

}catch(SQLException e){

throw new RuntimeException(e);

}finally{

SQLUtils.safeClose(st);

pool.close(con);

}

}

(这个功能是在网上找到的.作者,请原谅我不引用你的名字,我丢了!!)

只要没有SQL注释块,它就能完美运行.

copyToString()函数基本上就是它所说的.

我现在想要的是构建一个将从字符串中删除块注释的正则表达式.我只在文件中有块注释/ * * /,没有 – .

到目前为止我尝试过的:

mySb = mySb.replaceAll("/\\*.*\\*/", "");

不幸的是,我不是很擅长正则表达式……

我得到了“匹配的字符串看起来像/ *评论* /真实陈述/ *另一个评论* /”等所有麻烦……等等…

尝试

mySb = mySb.replaceAll("/\\*.*?\\*/", "");

(注意?代表“lazy”).

编辑:要涵盖多行注释,请使用以下方法:

Pattern commentPattern = Pattern.compile("/\\*.*?\\*/", Pattern.DOTALL);

mySb = commentPattern.matcher(mySb).replaceAll("");

希望这对你有用.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值