这只是一个简单的 资料库update 不知道是我的资料库设置错误,还是如何,出现了这个讯息
error code =21 上网址了一下,21代表 SQLITE_MISUSE 21 / 不正确的库使用 | Library used incorrectly /
不知道那里有问题,这只是一个很简单的程式
class ViewController: UIViewController {
@IBOutlet weak var labelId: UILabel!
@IBOutlet weak var textName: UITextField!
@IBOutlet weak var textChinese: UITextField!
@IBOutlet weak var textMath: UITextField!
@IBOutlet weak var tableViewSqlite: UITableView!
@IBOutlet weak var buttonInsert: UIButton!
@IBOutlet weak var buttonWrite: UIButton!
struct stu {
var id:Int32
var name:String
var chinese:Int32
var math:Int32
init(id:Int32, name:String, chinese:Int32, math:Int32) {
self.id = id
self.name = name
self.chinese = chinese
self.math = math
}
}
var arrStu:Array<stu> = [] //存资料库的阵列
var db:COpaquePointer = nil
var statement:COpaquePointer = nil
var sql:NSString = "" //SQL指令
var currentStu = 0 //目前资料
override func viewDidLoad() {
super.viewDidLoad()
buttonToggle(true,writeAble: false)
var fm:NSFileManager = NSFileManager()
db = nil
var src:String = NSBundle.mainBundle().pathForResource("student", ofType: "sqlite")!
var dst:String = NSHomeDirectory() + "/Documents/student.sqlite"
if !fm.fileExistsAtPath(dst){
do{
try!fm.copyItemAtPath(src, toPath: dst)
}
catch _ {
}
}
if sqlite3_open(dst, &db) != SQLITE_OK {
alertMsg("Error", msgStr: "cant open the db")
exit(1)
}
sql="select * from class101"
statement = nil
if sqlite3_prepare_v2(db, sql.UTF8String, -1, &statement, nil) != SQLITE_OK {
alertMsg("ERROR", msgStr: "read db faile")
exit(1)
}
while sqlite3_step(statement) == SQLITE_ROW {
var id = sqlite3_column_int(statement, 0)
var temName = sqlite3_column_text(statement, 1)
var name = String.fromCString(UnsafePointer<CChar>(temName))
var chinese = sqlite3_column_int(statement, 2)
var math = sqlite3_column_int(statement, 3)
var student:stu = stu(id: id, name: name!, chinese: chinese, math: math)
arrStu.append(student) //将资料列存入阵列
}
//sqlite3_finalize(statement)
tableViewSqlite.reloadData()
showSingle(0)
}
@IBAction func modeifyClick(sender: UIButton) {
var alertModify:UIAlertView = UIAlertView()
alertModify.title="更新"
alertModify.message="确定要更新资料?"
alertModify.delegate=self
alertModify.addButtonWithTitle("确定");
alertModify.addButtonWithTitle("取消");
alertModify.show();
}
@IBAction func deleteClick(sender: UIButton) {
if arrStu.count > 1 {
var alertDelete:UIAlertView = UIAlertView()
alertDelete.title="删除"
alertDelete.message="确定删除资料?"
alertDelete.delegate=self
alertDelete.addButtonWithTitle("确定")
alertDelete.addButtonWithTitle("取消")
alertDelete.show()
}
else{
self.alertMsg("ERROR", msgStr: "cant delete the data when data count =1")
}
}
func alertView(alertView: UIAlertView!, clickedButtonAtIndex buttonIndex:Int) {
if alertView.title=="更新" {
switch (buttonIndex) {
case 0:
var sql1="UPDATE clsss101 SET s_name'" + textName.text! + "',s_chinese='" + textChinese.text!
var sql2="', s_math='" + textMath.text! + "' WHERE s_id=" + labelId.text!
sql = sql1+sql2
statement = nil
sqlite3_prepare_v2(db, sql.UTF8String, -1, &statement, nil)
//下面行印出error code=21
//下面行印出error code=21
//下面行印出error code=21
//下面行印出error code=21
print(sqlite3_step(statement))
//*************下面这行错误******************
//*************下面这行错误******************
//*************下面这行错误******************
//*************下面这行错误******************
if sqlite3_step(statement) == SQLITE_DONE {
alertMsg("Success",msgStr:"DB update success")
}
else{
alertMsg("Error", msgStr: "Db update Fail")
}
arrStu[currentStu].name=textName.text!
arrStu[currentStu].chinese=Int32(Int(textChinese.text!)!)
arrStu[currentStu].math = Int32(Int(textMath.text!)!)
tableViewSqlite.reloadData()
default:
break
}
}
else if alertView.title == "删除" {
switch(buttonIndex){
case 0:
sql = "DELETE FROM class101 WHERE id='"+labelId.text!+"'"
statement = nil
sqlite3_prepare_v2(db, sql.UTF8String, -1, &statement, nil)
if sqlite3_step(statement) == SQLITE_DONE {
alertMsg("SUCCESS", msgStr: "Delete data success")
}
else{
alertMsg("Error", msgStr:"delete data faie")
}
arrStu.removeAtIndex(currentStu)
tableViewSqlite.reloadData()
if tableViewSqlite == arrStu.count {
--currentStu
}
showSingle(currentStu)
default:
break
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func showSingle(n:Int) {
labelId.text = "\(arrStu[n].id)"
textName.text = arrStu[n].name
textChinese.text = "\(arrStu[n].chinese)"
textMath.text = "\(arrStu[n].math)"
}
func buttonToggle(insertAble:Bool, writeAble:Bool) -> Void {
buttonInsert.enabled = insertAble
buttonWrite.enabled = writeAble
}
func alertMsg(titleStr:String, msgStr:String) -> Void {
let alertView:UIAlertView = UIAlertView(title: titleStr, message: msgStr, delegate: self, cancelButtonTitle: "确定")
alertView.show()
}
func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int{
return arrStu.count
}
func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
let cell: UITableViewCell = tableView!.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath);
cell.textLabel!.text = "姓名:\(arrStu[indexPath.row].name)"
cell.detailTextLabel?.text = "国文:\(arrStu[indexPath.row].chinese) 数学:\(arrStu[indexPath.row].math)"
return cell
}
func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
buttonToggle(true, writeAble:false)
currentStu = indexPath.row
showSingle(currentStu)
}
}