Oracle之 PLSQL使用

Oracle之 PLSQL使用

  1. 首先登录system用户,其他的用户登录创建的时候会出现权限不够的问题
    Oracle之 PLSQL使用_第1张图片

  2. PLSQL结构分析
    Oracle之 PLSQL使用_第2张图片

  3. 创建用户
    第一步:
    Oracle之 PLSQL使用_第3张图片
    第二步:
    设置角色权限
    Oracle之 PLSQL使用_第4张图片

  4. 建表
    第一步:
    Oracle之 PLSQL使用_第5张图片
    第二步:指定列名字和类型
    Oracle之 PLSQL使用_第6张图片

  5. 代码编写(Oracle数据库)
    参考文章:https://blog.csdn.net/weixin_42126427/article/details/106612475(Qsqlite数据库)

    连接数据库的
    	QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");//QOCI
    	db.setPort(1521);
    	db.setHostName("127.0.0.1");
    	db.setDatabaseName("ORCL");
    	db.setUserName("GJ");
    	db.setPassword("123456");
    	if (!db.open()) {
    		qDebug() << db.lastError().text();
    	}
    	else {
    		QMessageBox::warning(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("连接成功"));
    	}
    
    添加记录
        tabModel->insertRow(tabModel->rowCount(),QModelIndex()); //在末尾添加一个记录
        QModelIndex curIndex=tabModel->index(tabModel->rowCount()-1,1);//创建最后一行的ModelIndex
        theSelection->clearSelection();//清空选择项
        theSelection->setCurrentIndex(curIndex,QItemSelectionModel::Select);
    
    显示表信息,绑定外键
    	QTextCodec *codec= QTextCodec::codecForName("GBK");
        tabModel=new QSqlRelationalTableModel(this,DB);
        tabModel->setTable("STUDINFO"); //设置数据表
    	qDebug() << tabModel->lastError().text();
        tabModel->setEditStrategy(QSqlTableModel::OnManualSubmit);  //OnManualSubmit , OnRowChange
        tabModel->setSort(0,Qt::AscendingOrder); //排序
    
        tabModel->setHeaderData(0,Qt::Horizontal, codec->toUnicode("学号"));
        tabModel->setHeaderData(1,Qt::Horizontal, codec->toUnicode("姓名"));
        tabModel->setHeaderData(2,Qt::Horizontal, codec->toUnicode("性别"));
        tabModel->setHeaderData(3,Qt::Horizontal, codec->toUnicode("学院"));
        tabModel->setHeaderData(4,Qt::Horizontal, codec->toUnicode("专业"));
    
        //设置代码字段的查询关系数据表
        tabModel->setRelation(3,QSqlRelation("DEPARTMENTS","DEPARTID","DEPARTMENT")); //学院
        tabModel->setRelation(4,QSqlRelation("MAJORS","MAJORID","MAJOR"));//专业
    
        theSelection=new QItemSelectionModel(tabModel);
        connect(theSelection,SIGNAL(currentChanged(QModelIndex,QModelIndex)),
                this,SLOT(on_currentChanged(QModelIndex,QModelIndex)));
    
        ui->tableView->setModel(tabModel);
        ui->tableView->setSelectionModel(theSelection);
        ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView)); //为关系型字段设置缺省代理组件
    
        bool mmm = tabModel->select(); //打开数据表
    	qDebug() << tabModel->lastError().text();
    
    删除记录
     tabModel->removeRow(theSelection->currentIndex().row());
     tabModel->submitAll(); //立即更新
    
  6. 效果展示
    Oracle之 PLSQL使用_第7张图片
    Oracle之 PLSQL使用_第8张图片
    Oracle之 PLSQL使用_第9张图片
    Oracle之 PLSQL使用_第10张图片
    ……
    PS:遇到的问题
    “ORA-00904: “RELTBLAL_3”.“DEPARTMENT”: 标识符无效\nUnable to execute statement”
    问题所在是自己建表的时候把列名字写错了!

代码中可以通过,qDebug打印出来的进行查看错误,或者通过监听返回的值,来判断是否成功!

你可能感兴趣的:(Oracle之 PLSQL使用)